第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提示符
- mysql -uroot -p123456 --prompt 提示符
- 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;