MySQL

作者: 小袋鼠cf | 来源:发表于2019-01-05 16:55 被阅读0次

    Mysql

    是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。它是一款免费开源、小型、关系型数据库管理系统。


    为什么要用MySQL数据库?

    MySQL是目前最受欢迎开源的SQL数据库管理系统,与其他的大型数据库Oracle、DB2、SQL Server等相比,MySQL虽然有它的不足之处,对于个人或中小型企业来说,MySQL的功能已经够用了,在性能与标准的取舍上,一直坚持性能优先的原则,成为了互联网行业非常流行的数据库软件之一。 MySQL又是开源软件,因此没有必要花大精力和大价钱去使用大型付费数据库管理系统了。
    1.MySQL是开放源代码的数据库
    2.MySQL的跨平台性
    3.价格优势,MySQL的社区版本都是免费的,即使需要付费的附加功能价格也比其它数据库便宜。

    登录流程

        mysql -u root -p passwd:
    
    use databases;( 使用数据库)
    help
    show databases;( 显示所有的数据库)
    show tables;(  显示表)
    1064 错误代码,语法错误
    1045 登录错误 1007 创建同名的数据库时报错 1008 数据库不存在,删除数据库失败
    show grants;(  显示用户可以对服务器有哪些权限)
    show stataus;( 用于显示广泛的服务器状态信息)
    
    
    库:保存有组织的数据的容器
    表:某种特定类型数据的结构化清单,包含数据库中所存数据的数据库对象,有行和列组成。
    注:同一个数据库中不能有两个同名的表,在不同的数据库中可以存在名字相同的表。
    列:表中每列成为一个字段。
    数据类型:所允许的数据的类型。每个表列都有相应的数据类型,它限制该列表中存储的数据。
    行:表中的一个记录。
    主键:唯一标识表中每行的这个列。(辨别某一东西的唯一标识) 表中主键满足的条件: * 任意两行都不具有相同的主键值; * 每个行都必须有一个主键值,主键值不允许null值。 主键最好的习惯: * 不更新主键列中的值; * 不重用主键列的值; * 不在主键列中使用可能会更改的值。
    
    创建数据库
    创建: CREATE DATABASE XXXX charset =(等号可以省) ‘utf8’;
    查看创建过的数据库 : SHOW CREATE DATABASE XXXX;
    删除数据库 DROP DATABASE XXXX;
    创建已经存在的数据库 CREATE DATBASE IF NOT EXISTS XXXX;(不会报错, 会给一个警示) DROP DATABASE IF EXISTS XXXX;
    创建一个学生信息表
    
     CREATE table students( 
    id int auto_increment comment '主键',
    name varchar(50) not null comment '姓名', 
    age int not null comment '年龄',
     sex char(2) not null comment '性别', 
    primary key (id)
     ) comment '学生信息';
    
    查看创建的表信息 SHOW CREATE TABLE students;
    插入单条 insert into 表名(属性,,) values('','',''); INSERT INTO students values(1504000,'小米',23,'女');
    插入单条 insert into 表名(属性,,) values(" "," "," "), (' ',' ',' '), (' ',' ',' ')
    添加完查看 SELECT * FROM students;
    查看表结构 DESC students;
    删除表 DELETE FROM 表名;& TRUNCATE 表名;

    修改表名

    rename table 表名1 to 表名2;
    

    增加/删除列

    alter table 表名 add 属性 类型 约束条件;
    alter table custmers add phone int(11) not null first;
    alter table custmers add phone int(11) not null after phone;
    alter table 表名 drop column 属性;
    

    修改字段信息:

    alter table 表名 modify 属性 类型 约束条件;(修改某一列)
    alter table students change name new_name varchar(5) not null;
    alter table students modify sex char(2) firt;
    update 表名 set email = 'abdc123@163.com' where id = 5;(修改某一行)
    

    删除列/行

    delete from 表名 where id = '5';(行)
    alter table 表名 drop column phone;(列)
    

    查找:

    select * from students;
    select name from 表名 where place like '北京%';
    select count(*) from 表名;
    select count(*) from 表名 where place like '北京%';
    

    修改引擎

    alter table 表名 engine = MyISAM;
    

    MySQL数据类型

    数据类型是数据的一种属性,其中包括整数型、浮点型、日期和时间类型、字符串类型和二进制数据类型。
    

    整数类型

    整数类型 取值范围
    INYINT -128~127
    SMALLINT -32768~32767
    MEDIUMINT -8388608~8388607
    INT -2147483648~2147483647
    INTEGRE -2147483648~2147483647
    BIGINT

    日期时间

    类型 范围
    YEAR 1901~2155
    DATE 1000-01~9999-12-31
    TIME -839:59:59~839:59:59
    DATETIME 1000-01 00:00:00~9999-12-31 23:59:59
    字符串 字符串类型是在数据库中存储字符串的字符类型。
    char类型的长度是固定的,长度可以在0~255的任意值。
    varchar类型的长度是可变的。 
    注意:如果char和varchar的长度是5,插入的值的长度超过5系统就会报错(1406)。
    

    检索单个列

          例:select name from badboy;
          结束SQL语句,多条SQL语句必须以分号(;)分隔 关键字大写,所有列和表名使用小写
    

    检索多个列

        例:select name,age,id from badboy;
    

    select concat (name,id) from badboy;两个字符段在一格中出现 concat相当于join

    检索所有列

    select * from 表名;
    

    检索不同的行

    select distinct age from badboy;(去重)
    

    分页

        select name from badboy limit 5;显示表中的5行
    
        select name from students limit10,10;
    
        limit 4 offset 3 (从行3开始取4行) = limit 3,4
    

    使用完全限定的表名

        select [badboy.name](http://badboy.name) from stu_220.badboy;
    

    排序(order by)

        select name, age from students order by age asc;
    
        select name,age from students order by age desc;
    
        select id, name from students order by age,name;
    
        selcet name,age from students order by age desc, name;
    
        select name,age birthday from students where sex='女' and age >25 order by birthday desc;
    

    where 字句

        selcet name from students where age > 20;
    
        selcet name from students where age > 20 order by age;(order字句应放在where字句后)
    

    不等于: <>/!= selcet name from students where age<>20;

    between语句

        select name,upname from students where upname regexp '^[a-f]';
    
        select name,age from students where age between 18 and 20;
    

    and操作符

        select name,age,place from students where age < 20 and place like '山西%';
    

    or操作符

        select name, age from students where age=19 or age=20;
          IN select name,age form students where age in (19,20);
    
        select name,age form students where age between 18 and 19;
        select name,age form students where age>=18 and age <=19;
    

    in操作符一般比or操作符清单执行更快 in的做大优点是可以包含其他select语句,使得能够更动态地建立where语句

    三范式:

    1NF, 第一范式
    字段不能再分,就满足第一范式。
    -- 2NF, 第二范式
    每个表要有主键约束
    满足第一范式的前提下,不能出现部分依赖。
    消除符合主键就可以避免部分依赖。增加单列关键字。
    -- 3NF, 第三范式
    满足第二范式的前提下,不能出现传递依赖。
    某个字段依赖于主键,而有其他字段依赖于该字段。这就是传递依赖。
    将一个实体信息的数据放在一个表内实现。

    TRUNCATE

    TRUNCATE [TABLE] tbl_name
    清空数据
    删除重建表
    区别:
    1,truncate 是删除表再创建,delete 是逐条删除
    2,truncate 重置auto_increment的值。而delete不会
    3,truncate 不知道删除了几条,而delete知道。

    mysql函数与条件判断函数

    数学函数

    name desc
    ABS(X) 返回X的绝对值
    MOD(X,Y) 返回X被Y除后的余数。
    FLOOR(X) 返回不大于X的最大整数值。
    CEILING(X) 返回不小于X的最小整数值
    ROUND(X) 返回参数X的四舍五入的一个整数。

    TRUNCATE(X,Y) 返回X中小数点Y位后面的数

    字符串函数

    name desc
    LENGTH(str) 返回字符串str的长度。
    CONCAT(str1,str2,...) 返回来自于参数连结的字符串。如果任何参数是NULL,返回NULL。可以有超过2个的参数。一个数字参数被变换为等价的字符串形式。
    TRIM(str) 删除字符串两侧的空格。
    REPLACE(str,s1,s2) 字符串str中所有出的s1字符串由s2代替。
    SUBSTRING(str,pos,len) 从字符串str的起始位置pos返回一个长度未len的子串。
    REVERSE(str) 返回字符串反转顺序后的结果。
    LOCATE(substr,str) 返回子串substr在字符串str第一个出现的位置(起始位置)

    --#### 时间日期函数

    now(), current_timestamp(); -- 当前日期时间
    current_date(); -- 当前日期
    current_time(); -- 当前时间
    date('yyyy-mm-dd hh:ii:ss'); -- 获取日期部分
    time('yyyy-mm-dd hh:ii:ss'); -- 获取时间部分
    date_format('yyyy-mm-dd hh:ii:ss', '%d %y %a %d %m %b %j'); -- 格式化时间
    unix_timestamp(); -- 获得unix时间戳
    from_unixtime(); -- 从时间戳获得时间

    条件判断函数

    name desc exprote
    IF(expr1,expr2,expr3) 如果 expr1 是TRUE 则返回 expr2,否则返回expr3 SELECT IF(age>30,1,0) FROM studentinfo;
    IFNULL(v1,v2) 如果v1不为NULL则返回v1,否则返回v2 select IFNULL(phonenum,'123') as phone FROM studentinfo;
    CASE value WHEN 条件 THEN 结果END 如果value的值满足WHERE后面的条件,则返回THEN后面的结果,否则返回ELSE后面的结果 SELECT student_name,CASE WHEN age>50 THEN age ELSE 0 END FROM studentinfo;

    加密函数

    name desc exprote
    PASSWORD(str) 函数可以对字符串str进行加密。一般情况下,PASSWORD(str)函数主要是用来给用户的密码加密的。 SELECT PASSWORD('abcd');
    MD5(str) MD5(str)函数可以对字符串str进行加密。MD5(str)函数主要对普通的数据进行加密。 SELECT MD5('abc')

    相关文章

      网友评论

          本文标题:MySQL

          本文链接:https://www.haomeiwen.com/subject/lxqdrqtx.html