MYSQL笔记(正文)--cmd操作
MYSQL笔记(高阶) --cmd操作,点我跳转!
1.MYSQL语句的规范
- 关键字与函数名称全部大写
- 数据库名称、表名称、字段名称全部小写
- SQL语句必须以分号结尾
2.创建数据库
-- 1.创建数据库(在MYSQL中SCHEMA等同DATABASE)设置编码格式gbk,utf-8 {}选填,[]可填可不填 CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [DEFAULT] CHARACTER SET [=] charset_name; -- 2.创建zhh数据库; CREATE DATABASE zhh; CREATE DATABASE IF NOT EXISTS zhh CHARACTER SET gbk; -- 创建编码为gbk的数据库,如果此数据库存在,会产生一个警告,用SHOW WARNINGS;查看警告。 -- 3.显示所有的数据库;注意复数 SHOW DATABASES;
3.修改数据库
-- 1.修改数据库编码; ALTER {DATABASE | SCHEMA} [IF NOT EXISTS] [db_name] [DEFAULT] CHARATER SET [=] charset_name; ALTER DATABASE zhh CHARACTER SET utf-8; --修改数据库编码; SHOW CREATE DATABASE zhh; --查看zhh数据库编码;
4.删除数据库
-- 1.删除数据库 DROP {DATABASE | SCHEMA} [IF EXISTS] db_name; DROP DATABASE IF EXISTS zhh;-- 一定要保证数据库的存在;不存在产生WARNING可用SHOW查看警告;
5.数据类型
E-308= *10^-308 范围越大,占用的空间越大,性能优化。
year (年) 可存取两位或四位 1970 到 2069年----------------------- 1字节
time (时间) -8385959 到 8385959----------------------------------- 3字节
date(日期) 1000年-1月1号 到 9999年12月31日 -------------------- 3字节
扫描二维码关注公众号,回复: 961470 查看本文章date time(日期时间) 1000年-1月1号零点 到 9999年12月31日 23点59分59秒--- 8字节
time stamp (时间戳) 1970-01-01零点 到 2037年之间 ---------------------------- 4字节
①在实际的开发项目中,因为日期时间类型 存在时差的问题,所以一般会使用时间戳的方式
②MYsql中Time Stamp类型可以设定默认值,就像其他类型一样。自动update(更新) 和insat(插入) 到当前的时间
1. char<m>:(定长类型):
比如定义char(5),如果我们只赋值abc,那么计算机在存时会自动在后面补两个空格 。M的值:“ 0-255”;
2. var char<m>:(变长类型):
比如定义char(5),如果我们只赋值abc,那么计算机就只会存abc。
L+1个字节,其中L<=M且 M的值:“ 0-65535”;2^16
3. tiny text (小文本)
-L+1字节, L<2^8 值在 255-0 之间
4. enum <'value1','value2'...>(枚举) 枚举值,提供几个选项,选择其中一个;值为 0--65535 2^16
5. set <'value1','value2'...> : (集合) 最多64个成员,可以任选里面其中几个,任意排列组合
一、L+xxx字节 ; 其中xxx字节表示最大的存储范围; 1个字节为8个byte,8个byte最大的二进制值8个1转十进制就是255. 而2个字节就是16 个 1, 也可以说16个1就是2的16次方。依次推算;
二、枚举值; 枚举值指的是 给枚举型赋几个值,如单选框的形式,只能在你给的值中选择一个; 如:性别('男','女','保密') 只能选择一个。
6.创建数据表
先登录mysql -uroot -p、进入数据库USE zhh,查看当前使用的数据库SELECT DATABASE();
-- 1.创建数据表,字段名+字段数据类型 CREATE TABLE [IF NOT EXISTS] table_name( column_name data_type comment '为字段添加注释', .... ); -- 2.例 子表 CREATE TABLE user( id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,--AUTO_INCREMENT自动增长,默认初始1,必须与主键一起用 username VARCHAR(50) NOT NULL UNIQUE KEY,--不允许为空,默认为NULL,唯一值,不允许重复 age TINYINT UNSIGNED,-- UNSIGNED无符号,即大于等于0 salary FLOAT(8,2) UNSIGNED, -- 总共8位数,小数点后最多2位,如:123456.78 sex ENUM('1','2','3') DEFAULT '3',--单选三选一,如不赋值,则自动为3 pid SMALLINT UNSIGNED, --必须与父表的数据类型相同,字符长度可不同 FOREIGN KEY (pid) REFERENCES provience(id) ON DELETE CASCADE--创建外键,references把...作为参照(provience表的id),串联删除 ); --3.父表 CREATE TABLE provience( id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, proname VARCHAR(20) NOT NULL )
UNSIGNED 无符号(正数),
AUTO_INCREMENT 自动增长,初始值默认为1,多用于id,必须与主键一起使用,当插入数据失败时,一样会增加;
PRIMARY KEY (主键索引) 主键,一张表只能有一个主键,表中只能有唯一的值,主键自动为NOT NULL(非空约束),并且会自动创建索引(indexs);(主键约束)
FOREIGN KEY(外键约束) 外键,保持数据一致性,完整性,实现一对一或一对多关系,外键的数据类型必须与父表的相同,字符长度可不同,外键列(子表)和参照列(父表)必须创建索引(MYSQL中都会自动创建),有外键的都称为子表。
UNIQUE KEY (唯一索引) 唯一约束,字段可以为NULL,表中可以有多个唯一约束。;(唯一约束)
DEFAULT 默认值,当插入记录时,没有明确赋值,则自动赋予默认值。;(默认约束)
主表从表完全取决于业务,比如软件A是为老师而设计,用于管理学生的,那老师就是主表,主从表没有绝对。
7.查看数据表及结构
-- 1.查看当前数据库/指定数据库的数据表 SHOW TABLES [FROM db_name] [LIKE 'pattern' | WHERE expr] --2.例 SHOW TABLES;--查看当前数据库表(前提USE zhh进入数据库) SHOW TABLES FROM zzz;--查看zzz数据库的数据表 --3.查看数据表结构 SHOW COLUMNS FROM tb_name; --4.查看表生成的DLL/查看表的结构 SHOW CREATE TABLE tb_name; DESC tb_name; --5.查看数据表的索引 SHOW INDEXS FROM tb_name\G;--以网格的形式显示
8.插入记录
--1.插入记录, 插入表(字段名,字段名,..)值(XX,XX,..),字段名不填写的话必须填写全部的值,expr为表达式 INSERT [INTO] tb_name [(col_name),..] {VALUES|VALUE}({expr,DEFAULT},..),(...),...; --标准SQL语句 INSERT [INTO] tb_name SET col_name={expr|DEFAULT},...; --MYSQL的扩展语句,适用于插入单行,效率高一点 --2.插入记录,与上面方式的区别在于,此方法可以使用子查询(SbuQuery) INSERT [INTO] tb_name [(col_name,...)] SELECT... --插入指定数据表数据到此数据表 --3.例 --插入多条记录,插入的字段为自增字段的话,插入DEFAULT或NULL即可,md5计算哈希数 INSERT tb_name VALUES(DEFAULT,'John',25,3*7-5),(NULL,'May',md5('123'),0); INSERT tb_name(username) SELECT username FROM tb_name1 WHERE age >= 30; --2.
9.更新记录
--1.更新记录(表单更新),如果不加WHERE语句,则整个表都更新 UPDATE [LOW_PRIORITY] [IGNORE] tb_name SET col_name1={expression|DEFAULT}[,col_name2=(expression|DEFAULT)]... [WHERE where_condition]; --2.例 UPDATE tb_name SET age = age + 5 WHERE id = 5; -- 更新id为5的age值
10.删除记录
--1.删除记录(单表删除) DELETE FROM tb_name [WHERE where_condition]; --2.例 DELETE FROM tb_name WHERE id = 5;
11.查找记录
--1.查找表中记录 SELECT expr,... FROM tb_name; SELECT * FROM tb; --2.查找表中记录 SELECT select_expr [AS custom_name][,select_expr...] [ -- 想要查找的字段或者函数,AS显示自定义字段名 FROM tb_references -- user u,teacher t 相当于user AS u,字段名可以u.id,t.name [WHERE whe re_condition] [GROUP BY {col_name | position} [ASC|DESC],...] -- 查询结果分组,可以按照字段名或者位置(SELECT后字段名的顺序1/2/3)分组 [HAVING where_condition] -- 分组条件类似WHERE,后接聚合函数或SELECT后出现过的字段条件 [ORDER BY {col_name | expr | position} [ASC|DESC],...] -- 对查询结果进行排序,默认排序为ASC升序(小到大),可按多个字段排序,按BY后顺序优先排序 [LIMIT {[offset,] row_count | row_count OFFSET offset}] -- 限制查询结果返回的数量,offset偏移值 -- LIMIT 2-显示2条记录,LIMIT 2,2 - 下标从0开始,即从第3条记录显示2条(第3第4的记录) ];
12.修改数据表
--1.添加单列,definition定义,可以添加到某字段的前或后,默认添加到末尾 ALTER TABLE tb_name ADD [COLUMN] col_name column_definition [FIRST | AFTER col_name]; --2.添加多列 ALTER TABLE tb_name ADD [COLUMN] (col_name column_definition,...); --3.删除列 ALTER TABLE tb_name DROP [COLUMN] col_name; --4. 1)添加主键约束 2)添加唯一约束 3)添加外键约束 4)添加删除默认约束 ALTER TABLE tb_name ADD [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name,...); ALTER TABLE tb_name ADD [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY] [index_name] [index_type] (index_col_name,...); ALTER TABLE tb_name ADD [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name,...) REFERENCES reference_definition; ALTER TABEL tb_name ALTER[COLUMN] col_name {SET DEFAULT literal|DROP DEFAULT} --5.1)删除主键约束 2)删除唯一约束 3)删除外键约束 ALTER TABLE tb_name DROP PRIMARY KEY; ALTER TABLE tb_name DROP {INDEX|KEY} index_name; ALTER TABLE tb_name DROP FOREIGN KEY fk_symbol; --删除约束名CONSTRAINT --6.1)修改列定义 2)修改列名称 3、4)修改数据表名 ALTER TABLE tb_name MODIFY [COLUMN] col_name column_definition [FIRST|AFTER col_name] ALTER TABLE tb_name CHANGE [COLUMN] old_col_name new_col_name column_difinition [FIRST|AFTER col_name] ALTER TABLE tb_name RENAME [TO|AS] new_tb_name; RENAME TABLE tb_name TO new_tb_name[,tb_name2 TO new_tb_name]; --7.例 如需添加/删除多个,关键字都需要再写一次(ADD,DROP,ALTER,MODIFY,CHANGE,RENAME等) ALTER TABLE tb_name ADD age TINYINT UNSIGNED NOT NULL DEFAULT 10; --1.添加单列 ALTER TABLE tb_name DROP username,DROP age,ADD password VARCHAR(20) NOT NULL; --3.删除列并添加列 ALTER TABLE tb_name ADD CONSTRAINT PK_tb_name_id PRIMARY KEY(id); --4.1 添加主键约束 ALTER TABLE tb_name ADD UNIQUE (username); --4.2 添加唯一约束 ALTER TABLE tb_name ADD FOREIGN KEY(pid) REFERENCES provinces(id); --4.3 添加外键约束 ALTER TABLE tb_name ALTER age DEFAULT SET DEFAULT 15; --4.4 添加默认约束 ALTER TABLE tb_name DROP PRIMARY KEY; --5.1 删除主键约束 ALTER TABLE tb_name DROP INDEX username; --5.2 删除唯一约束 ALTER TABLE tb_name DROP FOREIGN KEY fk_symbol; --5.3 删除外键约束,fk_symbol是指外键名CONSTRAINT ALTER TABLE tb_name MODIFY id SMALLINT UNSIGNED NOT NULL FIRST; --6.1 修改列定义,大变小可能会造成数据丢失 ALTER TABLE tb_name CHANGE pid p_id TINYINT UNSIGNED NOT NULL; -6.2 修改列名称 ALTER TABLE tb_name RENAME tb_name2; --6.3 修改表名