MySQL

作者: 纵我不往矣 | 来源:发表于2016-04-25 20:06 被阅读141次

    第1章 初设mysql

    • SQL,指结构化查询语言,全称是 Structured Query Language。

    • RDBMS
      RDBMS 指关系型数据库管理系统,全称 Relational Database Management System。

    命令行启动/停止MySQL服务

    net start mysql
    net stop mysql
    

    发生系统错误 5.
    以管理员身份运行

    清屏:cls

    • -V输出版本信息并退出

    • -u用户名

    • -p密码

    • -P端口号3306

    • -h服务器名称(本地127.0.0.1)

    mysql -uroot -p123456 -P3306 -h127.0.0.1
    

    exit 退出

    • 修改mysql提示符
    1. mysql -uroot -p123456 --prompt 提示符
    2. prompt mysql>
    \D完整的日期
    \d当前数据库
    \h服务器名称
    \u当前用户
    

    select version();显示当前服务器版本
    select now();显示当前日期时间
    select user();显示当前用户

    • 关键字与函数名称全部大写
    • 数据库名称、表名称、字段名称全部小写。
    • SQL语句必须与分号结尾。
    创建数据库
    CREATE DATABASE [IF NOT EXISTS] t1;
    查看服务器下的数据库
    SHOW DATABASES;
    查看警告信息
    SHOW WARNINGS;
    查看创建数据库时的参数
    SHOW CREATE DATABASE t1;
    创建数据库的时候指定编码方式
    CREATE DATABASE IF NOT EXISTS t2 CHARACTER SET gbk;
    创建了以后再修改编码方式
    ALTER DATABASE t2 CHARACTER SET=utf8;
    删除数据库
    DROP DATABASE t1;
    

    第2章 数据类型与操作数据表

    • 数据类型之整形
    TINYINT
    SMALLINT
    MEDIUMINT
    INT
    BIGINT
    
    • 数据类型之浮点型
    FLOAT(M,D)
    DOUBLE(M,D)
    

    M是所有的位数。D是小数点之后的位数。

    • 数据类型之日期时间型
    YEAR
    TIME
    DATE
    DATETIME
    TIMESTAMP 时间戳
    
    • 数据类型之字符型
    CHAR(M)
    VARCHAR(M)
    TINYTEXT
    TEXT
    MEDIUMTEXT
    LONGTEXT
    ENUM('value1','value2',''...) 枚举类型
    SET('value1','value2',''...) 在集合中做随意的排列组合
    
    • 创建数据表
      打开数据库
    USE 数据库名称;
    

    显示当前打开的数据库select都会带括号

    SELECT DATABASE();
    

    创建数据表

    CREATE TABLE(IF NOT EXISTS) table_name(
    column_name data_type
    )
    
    • 查看数据表
    SHOW TABLES;
    SHOW TABLES FROM mysql;
    

    查看数据表结构

    SHOW COLUMNS FROM tb1;
    
    • 记录的插入与查找
      插入记录
    INSERT [INTO] tbl_name [(col_name,...)] values(val,...)
    INSERT tb1(username,salary) VALUES('John',4500.69)
    

    记录查找

    SELECT * FROM tb1;
    
    • 空值与非空
    NULL,字段值可以为空
    NOT NULL,字段值禁止为空
    
    • 自动编号
    AUTO_INCREMENT
    

    必须与主键组合使用
    默认情况下,起始值为1,每次的增量为1

    • 初涉主键约束
    PRIMARY KEY
    

    每张数据表只能存在一个主键
    主键保证记录的唯一性
    主键自动为NOT NULL
    主键可以不和自动编号一起使用。反之不行。
    主键的编号不能重复

    • 初涉唯一约束

    唯一约束可以保证记录的唯一性
    唯一约束的字段可以为空值(NULL)
    每张数据表可以存在多个唯一约束

    UNIQUE KEY
    
    • 初涉默认约束
    sex ENUM('1','2','3') DEFAULT '3'
    

    第3章 约束以及修改数据表

    • 外键约束的要求解析

    约束分为表级约束和列级约束
    保持数据一致性完整性
    实现一对一或一对多关系
    父表和子表必须使用相同的存储引擎
    数据表的存储引擎只能是InnoDB
    外键列和参照列必须具有相同的数据类型。其中数字的长度或是否有符号位必须相同,而字符的长度则可以不同。
    外键列和参照列必须创建索引。如果参照列不存在索引的话,MySQL将自动创建索引

    pid BIGINT,
    FOREIGN KEY(pid) REFERENCES provinces(id)
    
    SHOW INDEXES FROM provinces;
    

    \G 换一种方式显示

    • 外键约束的参照操作
    ON DELETE CASCADE 从父表删除或更新且自动删除或更新子表中匹配的行。
    SET NULL 从父表删除或更新行,并设置子表中的外键列为NULL。
    RESTRICT 拒绝对父表的删除或更新操作
    NO ACTION 标准SQL的关键字,在MySQL中与RESTRICT相同
    一般使用逻辑外键而不是物理外键。即不用foreign关键字
    
    delete from provinces where id=3;
    
    • 对多个数据列建立的约束称为表级约束。
      列级约束既可以在列定义时说明,也可以在列定义后说明。表级约束只能在列定义后说明。

    • 修改数据表,添加删除列
      添加单列

    ALTER TABLE user1 ADD age TINYINT UNSIGNED NOT NULL DEFAULT 10;
    

    添加多列,不能指定位置关系
    删除列,用逗号做分割

    ALTER TABLR user1 DROP truename
    
    • 修改数据表,添加约束(主键的名字)
    ALTER TABLE users2 ADD ID SMALLINT UNSIGNED
    ALTER TABLE users2 ADD CONSTRAINT PK_users2_id PRIMARY KEY(id)
    ALTER TABLE users2 ALTER age SET DEFAULT 15;
    ALTER TABLE users2 ALTER age DROP DEFAULT;
    
    • 修改数据表,删除约束
    ALTER TABLE users2  DROP PRIMARY KEY;
    

    一张表可以有多个唯一约束,删除约束而不是字段

    ALTER TABLE user2 DROP INDEX username
    

    显示索引,以网格的形式展现

    SHOW INDEXES FROM users2\G;
    

    删除外键约束

    ALTER TABLE users2 DROP FOREIGN KEY 外键的名字
    
    • 修改数据表,修改列定义和更名数据表
      修改列定义(放在最前面)
    ALTER TABLE users2 MODIFY id SMALLINT UNSIGNED NOT NULL FIRST;
    

    修改列名称(CHANGE 功能大于 MODIFY)

    ALTER TABLE users2 CHANGE pid p_id TINYINT UNSIGNED NOT NULL
    

    修改表的名称

    ALTER TABLE users2 RENAME users3;
    RENAME TABLE user3 to user2
    

    第4章 操作数据表中的记录

    回顾和概述

    约束:表级约束、列级约束

    插入记录INSERT
    • 给自动编号的赋值。两种方法:NULL或DEFAULT
    • 赋值除了数值,还可以是表达式
    • 字段存在默认值的话,既可以赋值原来的默认值,也可以赋值DEFAULT
    • 一次性插入多条记录
    INSERT tb VALUES(),()
    
    插入记录INSERT SET-SELECT
    • INSERT SET与第一种方式的区别在于,此方法可以使用子查询(SubQuery)
    INSERT tb1_name SET col_name={expr|DEFAULT} 
    INSERT users SET username='ben',password='456';
    
    表单更新记录UPDATE
    • 单表更新,多表更新
    UPDATE users SET age=age+5;
    UPDATE users SET age=age-id,sex=0;
    SELECT * FROM users;
    UPDATE users SET age=age+10 WHERE id%2=0;
    
    单表删除记录DELETE
    DELETE FROM users WHERE id=6;
    INSERT users values();
    

    把记录删掉以后。再添加纪录,id号不会补充原有删除的id号。

    查询表达式解析
    • 查找记录,查询表达式的顺序影响结果的顺序
    SELECT VERSION();
    SELECT NOW();
    SELECT user();
    SELECT * FROM users;
    SELECT columns FROM users;
    SELECT id,username FROM users;
    SELECT users.id,users.username FROM users;
    

    不依附于任何表,就是一个表达式

    SELECT 3+5;
    

    为字段赋予别名,影响结果的输出

    SELECT id as userid,username as uname FROM users;
    
    WHERE 语句进行条件查询
    • 条件表达式
    GROUP BY 对查询结果进行分组
    SELECT * FROM users;
    SELECT sex FROM users GROUP BY sex;
    SELECT sex FROM users GROUP BY 1; 字段的第一个是1
    
    having 语句设置分组条件(某一部分记录进行分组)
    SELECT sex FROM users GROUP BY 1 HAVING age>35;
    
    ORDER BY 对查询结果进行排序
    SELECT * FROM users;
    SELECT * FROM users ORDER  BY 1 HAVING age>35;
    
    LIMIT限制查询数量
    SELECT * FROM users LIMIT 2;
    SELECT * FROM users LIMIT 2,2;
    第三个开始,查询两个
    INSERT test(username) SELECT username FROM users WHERE age>=30;
    

    第5章 子查询与连接

    相关文章

      网友评论

          本文标题:MySQL

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