MySQL data table related operations and queries

1. Relevant instructions for building a table

(1)AUTO_INCREMENT 自增长
与主键搭配使用。就是新插入行在该字段置如果不指定值,
就根据该字段目前最大的值+1
在创建表();之后可写AUTO_INCREMENT=100
就代表了自增长从100开始。

(2)NOT NULL 非空
字段一定要赋值,否则报错。当然,如果自增长的话,就可
不赋值。

(3)DEFAULT 默认值
没赋值就默认该值。
栗子:
age TINYINT NOT NULL DEFAULT 18 # 不输入年龄就默认18

(4)UNIQUE KEY 唯一
一个表只能有一个主键,但可以有多个唯一
唯一代表了插入的行中该字段的值不能重复
NULL值可以重复的哈

(5)以上内容在创建表时顺序    # []代表实际操作可省略
CREATE TABLE [ IF NOT EXIST ] tb_name(
字段名称 字段类型 [UNSIGNED | ZEROFILL] [NOT NULL] [DEFAULT 默认值][[PRIMARY] KEY | UNIQUE [KEY]] [AUTO_INCREMENT]
); ENGINE = INOODB CHARSET = UTF8 AUTO_INCREMENT=100

Second, the related operations of the data table

Insert picture description here

(1)修改表名
ALTER TABLE tb_name RENAME tb_new_name
RENAME TABLE tb_name TO tb_new_name 

(2)添加字段、删除字段
添加:ALTER TABLE tb_name ADD 新字段  字段属性  约束条件;
# 默认添加到最后 可在约束条件后空格加上 FIRST 就加到最前了
   或者用 AFTER 某个字段 , 表示添加到这个字段之后
删除: ALTER TABLE tb_name DROP 某个字段

(3)修改字段
ALTER TABLE  tb_name CHANGE 旧字段名称 新字段名称 字段类型[完整性约束条件] [FIRST| AFTER 某个字段] # 修改字段信息
ALTER TABLE  tb_name MODIFY 字段名称 字段类型[完整性约束条件] [FIRST| AFTER 某个字段]  # 不改名字的前提下改其它的

(4)给字段添加或者删除默认值
ALTER TABLE  tb_name ALTER 字段名称 SET DEFAULT 默认值
ALTER TABLE  tb_name ALTER 字段名称 DROP DEFAULT

(5)添加或删除主键
ALTER TABLE tb_name ADD PRIMARY KEY(字段名称)
ALTER TABLE tb_name ADD PRIMARY KEY(字段名称1,字段名称2)   # 添加复合主键
ALTER TABLE DROP PRIMARY KEY; # 删除主键
# 注意,去主键之前必须先去掉自增长
# 去自增长 ALTER TABLE tb_name MODIFY 字段名称 [INT] UNSIGNED;

(6)添加或删除唯一
ALTER TABLE tb_name ADD UNIQUE [INDEX | KEY] [索引名称] 字段名称
ALTER TABLE tb_name DROP INDEX 字段名称
ALTER TABLE tb_name DROP UNIQUE 字段名称
(7)修改存储引擎
ALTER TABLE tb_name ENGINE = 存储引擎名称
(8)设置自增长的值
ALTER TABLE tb_name AUTO_INCREMENT = 值

(9)删除数据表
DROP TABLE [IF EXISTS] tb_name [, tb_1name,  tb_2name ]

Insert picture description here

(10)插入记录
INSERT INTO tb_name VALUES(值,...);
INSERT  tb_name VALUE(值, ....);
INSERT tb_name(字段名,字段名) VALUES() # 定点赋值
INSERT INTO tb_name SET 字段1 = 值1, 字段二 = 值2
***************************************
# 查询结果的插入
INSERT tb_name [(字段名称,...)] SELECT 字段名称 FROM tb_name [WHERE 条件][ORDER BY 字段名称][LIMIT 限制条数]
栗子:
INSERT testUser SELECT id,username FROM user;

(11)更新和删除记录
UPDATE tb_name SET 字段名称 = 值,... [WHERE 条件][ORDER BY 字段名称][LIMIT 限制条数]
栗子:比如我想更新user表格第一条记录的password字段
UPDATE user SET password = ‘123456789’ WHERE id=10000 # 这里默认id为主键,且id=10000代表第一条记录
***************************************************
DELET FROM user WHERE id=10000 # 我不想要这个人了

Three, query

(1)查询记录

Insert picture description here

SELECT FROM tb_name [WHERE][GROPU BY][ASC|DESC 分组]
[HAVING 条件 对分组二次筛选]
[ODER BY [ASC|DESC 分组] 排序]
[LIMIT 限制显示条数]
(2)查询表达式

Insert picture description here


SELECT cms_admin* FROM cms_admin; # 查询这个表的所有数据
# 起别名
## 给表起别名
SELECT id,user FROM cms_admin AS a;
SELECT a.id, a.username;
## 给字段起别名
SELECT telephone AS tel FROM a;
SELECT telephone AS '电话' FROM a; # 这样显示出来是中文

Insert picture description here

(3)有条件的查询(WHERE)
SELECT id,username,email FROM cms_user WHERE id=1;
SELECT * FROM cms_user WHERE id != 1;
SELECT * FROM cms_user WHERE age <=> NULL; # NULL值检测要用这个等号才行,或者用下面方法
SELECT * FROM cms_user WHERE age IS NULL;

(4)范围查询  BETWEEEN    AND |  IN
SELCT * FROM cms_user WHERE id NOT BETWEEEN 10001 AND 10008;
SELECT FROM cms_user WHERE id IN(10001,10008);

(5)模糊查询 LIKE| NOT LIKE
SELECT * FROM cms_user WHERE username LIKE '张%' # 百分号表示不清楚是啥
SELECT * FROM cms_user WHERE username LIKE '%子%' # 这表示只记住了中间名
SELECT * FROM cms_user WHERE email LIKE '%qq%' 

(6)分组查询 GROP BY
SELECT * FROM cms_user GROPU BY sex,age; # 先按性别,再按照年龄来分组
UPDATE cms_user SET sex='女' WHERE id IN(10002, 10009);  # 这里只是表示一下,这些函数不一定要在 WHERE 上用。
SELECT * FROM cms_user WHERE id>=5 DROPU BY sex;

(7)分组配合聚合函数
*****************配合GROUP_CONCAT()得到分组详情
COUNT()
MAX()
MIN()
AVG()
SUM()
*****************配合WITH ROLLUP记录上面所有记录的总和
#下面试用GROUP_CONCAT()
SELECT id,sex,GROU_CONCAT(username) FROM cms_user GROPU BY sex; 
# 上面知道了id,sex,以及各性别的组中有哪些人
栗子:查询省份,性别详情,邮箱详情,按照省份分组
SELECT GROU_CONCAT(sex),GROU_CONCAT(emial) FROM cms_user DROUP BY province;
# 下面配合聚合函数
##栗子1:查询编号,sex,用户名详情、总人数,按照sex分组
SELECT id,sex, GROU_CONCAT(username) AS users, 
COUNT(*) AS totoalUsers FROM cms_user GROUP BY sex;  # COUNT 字段不统计NULL值
# 结果如下

Insert picture description here

##栗子2:查询编号,性别,用户名详情,组中最大年龄、
最小年龄、平均年龄、年龄总和,按性别分组
SELECT id,sex,DROUP_CONCAT(username),
COUNT(*) AS totalUsers,
MAX(age) as max_age,
MIN(age) as min_age,
AVG(age) as avg_age,
SUM(age) as sum_age,
FROM cms_user
GROUP BY sex ; #
#结果如下

Insert picture description here

(8)having语句对分组结果的二次筛选
# 和WHERE 差不多,就是位置不同
比如我要上面那组查询的组中人数大于2的记录(totallUser>2)
且最大年龄大于60.
SELECT id,sex,DROUP_CONCAT(username),
COUNT(*) AS totalUsers,
MAX(age) as max_age,
MIN(age) as min_age,
AVG(age) as avg_age,
SUM(age) as sum_age,
FROM cms_user
GROUP BY sex 
HAVING COUNT(*)>2 AND MAX(age)>60 ;    #这样就好了
# 注意,HAVING 一定要在GROUP BY 之后!!

Guess you like

Origin blog.csdn.net/tjjyqing/article/details/113735812