学院视频简单汇总
一、常用命令
在命令行中,配置好环境变量后,通过cmd可以直接进入mysql命令行模式,同时列举几种常用命令
# 进入mysql数据库,密码可以先不写,打完-p后再输入,防止被别人看到
mysql -u账号 -p密码
-u 用户名
-p 密码
-h 服务器名称
-p 端口号
-D 打开指定数据库
--prompt=name 设置命令提示符
--delimiter=name 指定分隔符
-V,--version 输出版本信息并且退出
exit,quit,\q 退出
# 创建数据库
CREATE {DATABASE|SCHEMAS} [IF NOT EXISTS] db_name DEFAULT CHARACTER SET = 'UTF8|GBK|...';
CREATE DATABASE IF NOT EXISTS myWebSite;
# 修改数据库编码方式
ALTER {DATABSE|SCHEMAS} db_name [DEFAULT] CHARACTER SET [=] charset_name;
ALTER DATABSE myWebSiteDEFAULT CHARACTER SET = utf8;
# 数据库列表
SHOW DATABASE;
SHOW SCHEMAS;
# 查看指定数据库定义
SHOW CREATE {DATABASE|CEHMAS} db_name;
SHOW CREATE DATABASE myWebSite;
# 查看上条数据库警告
SHOW WARNINGS;
# 打开指定数据库和查看当前打开的数据库(如果忘记了)
USE db_name;
SELECT DATABASE()|SCHEMAS();
# 删除指定数据库
DROP {DATABASE|CEHMAS} [IF EXISTS] db_name;
DROP DATABASE IF EXISTS myWebSite;
# 查看数据表结构
DESC db_name;
DESCRIBE db_name;
SHOW COLUMNS FROM db_name;
# UNSIGNED 无符号,移除负数范围,即无法填充负数范围的数值
CREATE TABLE table_name(num1 INT UNSIGNED);
# ZEROFILL 自动补充0,创建数据表时,会根据其位数自动在前面补0,如int,默认十位数范围,填充1数字,会变成0000000001
CREATE TABLE table_name(num1 INT ZEROFILL);
二、配置mysql输出日志到指定位置
在sql命令行中,输入以下命令即可
\T D:\SQLlog\syslog.txt
三、数据类型(需要注意的)
- 字符串-枚举类型 ENUM
ENUM(temp1,temp2,temp3)
注意:设置的字符串中含有空格将自动忽略
栗子:CREATE TABLE IF NOT EXISTS test(sex ENUM('男','女','保密'));
测试:INSERT test VALUES('男');
错误:存入的值与枚举中地值不一致时会报错
测试:INSERT test VALUES('男1');
特殊1:存入的值可以为序号,序号值从1开始,即男为1,女为2,保密为3
测试1:INSERT test VALUES(1);
特殊2:如果设置的字段可以为NUll,则也可以键入
测试2:INSERT test VALUES(NULL);
- 字符串-集合类型 SET
SET(temp1,temp2,temp3)
注意:设置的字符串中含有空格将自动忽略
栗子:CREATE TABLE IF NOT EXISTS test(favour SET('A','B','C','D'));
测试:INSERT test VALUES('A,C,D');INSERT test VALUES('D,B,A');
特殊1:存入的值是以2进制来保存,可以使用2进制来控制值,ABCD分别以1、2、4、8来表示,这里键入3,则表示保存AB,15则表示保存所有
测试1:INSERT test VALUES(3);INSERT test VALUES(15);
四、完整性约束条件
- PRIMARY KEY 主键,可简写为KEY,复合主键可写为PRIMARY KEY(字段1,字段2)
- AUTO_INCREMENT 自增长,配合主键使用,可以指定值也可以不指定,特殊指定为NULL或DEFAULT也会增长,创建表结构时设置AUTO_INCREMENT为100则从100开始增长
- FOREIGN KEY 外键
- NOT NULL 非空
- UNIQUE KEY 唯一
- DEFAULT 默认值,插入为默认值可使用DEFAULT进行设置
CREATE TABLE [IF NOT EXISTS] tbl_name(
字段名称 字段类型 [UNSIGNED|ZEROFILL] [NOT NULL] [DEFAULT 默认值] [[PRIMARY] KEY| UNIQUE [KEY]] [AUTO_INCREMENT]
)
五、数据表操作
- 列出所有表
SHOW TABLES;
- 修改表名
规范
ALTER TABLE tbl_name RENAME [TO|AS] new_name;
RENAME TABLE tbl_name TO new_name;
ALTER TABLE tbl_name RENAME TO tbl_name1;
或者
ALTER TABLE tbl_name RENAME AS tbl_name1;
或者
ALTER TABLE tbl_name RENAME tbl_name1;
- 添加字段
ALTER TABLE tbl_name ADD 字段名称 字段类型 [完整性约束条件] [FIRST|AFTER 字段名称]
--栗子--
ALTER TABLE test ADD card CHAR(18);
ALTER TABLE test ADD card1 VARCHAR(100) NOT NULL UNIQUE;
ALTER TABLE test ADD card2 VARCHAR(18) NOT NULL FIRST;
ALTER TABLE test ADD card3 INT NOT NULL DEFAULT 100 AFTER card;
--选中一次表,完成多个操作--
ALTER TABLE test
ADD card4 INT NOT NULL DEFAULT 123 AFTER card3,
ADD card5 FLOAT(6,2) FIRST,
ADD card6 SET('A','B','C');
- 删除字段
ALTER TABLE tbl_name DROP 字段名称
--栗子--
ALTER TABLE test DROP card;
--删除多个--
ALTER TABLE test
DROP card,
DROP card1;
- 修改字段
ALTER TABLE tbl_name MODIFY 字段名称 字段类型 [完整性约束条件] [FIRST|AFTER]
--栗子--
ALTER TABLE test MODIFY card VARCHER(20) NOT NULL DEFAULT '123';
--修改类型并移动字段位置--
ALTER TABLE test MODIFY card VARCHER(20) AFTER card1;
- 修改字段名称
ALTER TABLE tbl_name CHANGE 旧字段名称 新字段名称 字段类型 [完整性约束条件] [FIRST|AFTER 字段名称]
--栗子--
ALTER TABLE test CHANGE card card1 CHAR(32) NOT NULL DEFAULT '123';
- 添加默认值
ALTER TABLE tbl_name ALTER 字段名称 SET DEFAULT 默认值
- 删除默认值
ALTER TABLE tbl_name ALTER 字段名称 DROP DEFAULT
- 添加主键
ALTER TABLE tbl_name ADD [CONSTRAINT[symbol]] PRIMARY KEY[index_type](字段名称,...)
--栗子--
ALTER TABLE test ADD PRIMARY KEY(id);
--复合主键--
ALTER TABLE test ADD PRIMARY KEY(id,card);
--完整--
ALTER TABLE test ADD CONSTRAINT symbol PRIMARY KEY index_type(id);
- 删除主键
ALTER TABLE tbl_name DROP PRIMARY KEY
--特殊,删除自增长主键(先取消自增长属性)--
ALTER TABLE test MODIFY id INT UNSIGNED;
ALTER TABLE test DROP PRIMARY KEY;
- 添加唯一
ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY] [索引名称](字段名称,...)
--栗子--
ALTER TABLE test ADD UNIQUE(card);
ALTER TABLE test ADD CONSTRAINT symbol UNIQUE KEY uni_card(card);
--复合唯一--
ALTER TABLE test ADD CONSTRAINT symbol UNIQUE INDEX nul_uni_card(card1,card2);
- 删除唯一
ALTER TABLE tbl_name DROP {INDEX|KEY} index_name
- 修改表的存储引擎
ALTER TABLE tbl_name ENGINE=存储引擎名称
- 设置自增长的值(确定表中有自增长值)
ALTER TABLE tbl_name AUTO_INCREMENT=值
- 删除表
DROP TABLE [IF EXISTS] tbl_name[,tbl_name...]
- 添加数据、更新数据、删除数据(略)
- 查询数据(特殊,可输出前置固定的列数据)
SELECT 1,2,3,4,5,id,username FROM cms_user;
- 查询表达式LIKE
- %,任意字符不限长度
- _,1个任意字符
栗子:
username中含有1:
SELECT * FROM cms_user WHERE username LIKE '%1%';
username中含有有3个任意字符:
SELECT * FROM cms_user WHERE username LIKE '___';
username中含有第1位为1个任意字符,第2位为字符a,后面位任意字符:
SELECT * FROM cms_user WHERE username LIKE '_a%';
- 分组查询GROUP BY
- 配合GROUP_CONCAT()得到分组详情
# 分组查询
SELECT * FROM cms_user GROUP BY sex;
# 配合分组详情
SELECT id,sex,GROUP_CONCAT(username) FROM cms_user GROUP BY sex;
- 聚合函数
- COUNT()
- MAX()
- MIN()
- AVG()
- SUM()
- 配合WITH ROLLUP记录上面所有记录的总和
SELECT id,sex,COUNT(*) AS totalUsers,MAX(age) AS max_age,MIN(age) AS min_age FROM cms_user GROUP BY sex WITH ROOLUP;
- 针对查询结果做二次筛选HAVING,配合GROUP BY使用
SELECT sex,GROUP_CONCAT(username) AS users,COUNT(*) AS totalUsers,MAX(age) AS max_age,MIN(age) AS min_age FROM cms_user GROUP BY sex HAVING COUNT(*)>2 AND MAX(age)>60;
- 对查询结果排序ORDER BY
- 默认升序ASC,降序DESC
- RAND(),随机排序,产生随机排序结果
# 简单排序
SELECT * FROM cms_user GROUP BY age ASC,id DESC;
# 随机排序
SELECT * FROM cms_user GROUP BY RAND();
- LIMIT限制查询结果显示条数
- 用作分页
- 用作更新时,LIMIT只能带一个参数值,没有起始参数
# 查询操作
SELECT * FROM cms_user LIMIT 0,1;
# 更新前三条记录age的值
UPDATE cms_user SET age=age+10 LIMIT 3;
- 内连接查询
- JOIN|CROSS JOIN INNER JOIN
- 通过ON连接条件
# 该内连接操作与使用下面第二行的WHERE条件查询一致
SELECT u.id,u.username,u.email,u.sex,p.proName FROM cms_user AS u INNER JOIN provinces AS p ON u.proId = p.id;
SELECT u.id,u.username,u.email,u.sex,p.proName FROM cms_user AS u,provinces AS p WHERE u.proId = p.id;
- 外连接查询
- 左外连接 LEFT [OUTER] JOIN 显示左表的全部记录及右表符合连接条件的记录
- 右外连接 RIGHT [OUTER] JOIN 显示右表的全部记录及左表符合连接条件的记录
# 略
- 外键关联
- CASCADE:从父表删除或更新且自动删除或更新子表中匹配的行(级联操作)
- SET NULL:从父表删除或更新行,并设置子表中的外键列为NULL。如果使用该选项,必须保证子表列没有指定NOT NULL
- RESTRICT:拒绝对父表的删除或更新操作(默认),设置该外键关联后,必须确保数据完整性的前提下才能执行删除或更新操作,否则会报错
- NO ACTION:标准SQL的关键字,在MySQL中与RESTRICT相同(默认)
# RESTRICT 默认
# 部门表
CREATE TABLE IF NOT EXISTS department(
id TINYINT UNSIGNED AUTO_INCREMENT KEY,
departName VARCHAR(20) NOT NULL UNIQUE
) ENGINE=INNODB;
# 员工表
CREATE TABLE IF NOT EXISTS employee(
id SMALLINT UNSIGNED AUTO_INCREMENT KEY,
username VARCHAR(20) NOT NULL UNIQUE,
depId TINYINT UNSIGNED,
CONSTRAINT emp_fk_dep FOREIGN KEY(depId) REFERENCES department(id)
) ENGINE=INNODB;
# CONSTRAINT emp_fk_dep为外键名称,可以不写,系统会默认生成一个
# depId为外键参照字段,department(id)为映射主表的主键字段
# 栗子解释1:
# 如果员工表中,A1员工属于A部门,直接删除部门表中A部门这条数据会报错,必须先将员工表中,属于A部门的所有员工数据先删除,才能删除部门表中地A部门这条数据;
# 栗子解释2:
# 插入员工表数据,如果插入数据中departId不存在部门表中,也会插入失败;
# CASCADE 级联
# 员工表
CREATE TABLE IF NOT EXISTS employee(
id SMALLINT UNSIGNED AUTO_INCREMENT KEY,
username VARCHAR(20) NOT NULL UNIQUE,
depId TINYINT UNSIGNED,
CONSTRAINT emp_fk_dep FOREIGN KEY(depId) REFERENCES department(id) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=INNODB;
# 删除父表中的记录时,对应的子表中的记录会全部删除
# 更新操作,要先将对应的子表中地记录全部删除才能进行更新
# SET NULL
# 员工表
CREATE TABLE IF NOT EXISTS employee(
id SMALLINT UNSIGNED AUTO_INCREMENT KEY,
username VARCHAR(20) NOT NULL UNIQUE,
depId TINYINT UNSIGNED,
CONSTRAINT emp_fk_dep FOREIGN KEY(depId) REFERENCES department(id) ON DELETE SET NULL ON UPDATE SET NULL
) ENGINE=INNODB;
# 删除父表中的记录时,对应的子表中的记录外键值会设置为NULL
# 更新操作,对应的子表中的记录外键值也会设置为NULL
- 添加外键
- 删除外键
# 添加外键(确保数据关联性没有问题的情况下)
ALERT TABLE emploee ADD CONSTRAINT emp_fk_dep FOREIGN KEY(depId) REFERENCES department(id);
# 删除外键
ALERT TABLE emploee DROP FOREIGN KEY emp_fk_dep;
- UNION
- UNION ALL
- UNION和UNION ALL区别是UNION去掉相同记录,UNION ALL是简单的合并到一起
# UNION
SELECT username FROM employee UNION SELECT username FROM cms_user;
# UNION ALL
SELECT username FROM employee UNION ALL SELECT username FROM cms_user;