新建
CREATE TABLE confirm_table(
id INT PRIMARY KEY auto_increment, #编号 整形 主键 自增长
name VARCHAR(18), #名称
description VARCHAR(100) COMMENT '描述' #COMMIT 注
);
插入
INSERT INTO confirm_table (name,description) VALUES('joe','to be better');
添加字段(列)
#在字段name后面添加字段sex,COLUMN可有可不有
ALTER TABLE confirm_table ADD [COLUMN] sex VARCHAR(5) NOT NULL DEFAULT 'women' AFTER name;
修改字段(列)名,字段类型
# CHANGE 修改字段名
ALTER TABLE confirm_table CHANGE sex custom VARCHAR(100) COMMENT '习性';
-- 或者使用 modify
-- 修改注释
alter table confirm_table modify column field_name int comment '修改后的字段注释';
-- 注意:字段名和字段类型照写就行
# alter 快捷修改默认值
alter table confirm_table alter column field_name drop default; (若本身存在默认值,则先删除)
alter table confirm_table alter column field_name set default 默认值;(若本身不存在则可以直接设定)
重命名表名
ALTER TABLE confirm_table RENAME person;
Limit
limit 语法格式:
limit [位置偏移量] , 行数
中括号里面的参数是可选参数,位置偏移量是指MySQL查询分析器要从哪一行开始显示,索引值从0开始(默认),即第一条记录位置偏移量是0,第二条记录的位置偏移量是1,依此类推...
第二个参数为“行数”即指示返回的记录条数。
#不指定偏移量,起始值是0,查询 2条记录
SELECT * FROM person LIMIT 2;
#指定偏移量,起始值是1(数据表第2条记录开始),查询 2条记录
SELECT * FROM person LIMIT 1,2;
Locate position
locate(substr , str)
position(substr IN str)
返回子串 substr 在字符串 str 中第一次出现的位置。如果子串 substr 在 str 中不存在,返回值为 0.
# 当前person表里只有'joe'一条记录 , 'joe' 不包含 'do' , 因此返回 'joe'一条记录
SELECT * FROM person WHERE LOCATE('do',name) = 0;
locate(substr , str , pos)
返回子串 substr 在字符串 str 中的第 pos 位置后第一次出现的位置。如果 substr 不在 str 中返回 0.
SELECT LOCATE('bo', 'barboyybo',5);
#输出 8
concat group_concat
为了方便理解concat,我们再插入几条记录:
……
INSERT INTO person VALUES(NULL, 'yellia', 'women', 'officer');
现在的表格如下:
concat的用法:
SELECT CONCAT(name, ' , ' , custom, ' , ' , description) AS naCusDes FROM person;
结果为:
GROUP_CONCAT函数返回一个字符串结果,该结果由分组中的值连接组合而成。常和groupby连用
先看个 group by 的用法:
SELECT COUNT(*) , custom FROM person GROUP BY custom;
结果为:
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
group_concat的用法:
SELECT GROUP_CONCAT(name , '$$' , custom) FROM person GROUP BY custom;
结果为:
连接
我们新建俩张表再插入数据,方便我们比较验证。
DROP TABLE pets;
CREATE TABLE pets(
id INT(2) NOT NULL PRIMARY KEY auto_increment,
name VARCHAR(20)
);
INSERT INTO pets VALUES(NULL,'cat');
INSERT INTO pets VALUES(NULL,'dog');
INSERT INTO pets VALUES(NULL,'snake');
INSERT INTO pets VALUES(NULL,'fish');
INSERT INTO pets VALUES(NULL,'tortoise');
DROP TABLE pets2;
CREATE TABLE pets2(
id2 INT(2) NOT NULL PRIMARY KEY auto_increment,
name2 VARCHAR(20)
);
INSERT INTO pets2 VALUES(NULL,'tiger');
INSERT INTO pets2 VALUES(NULL,'rabbit');
INSERT INTO pets2 VALUES(NULL,'tortoise');
INSERT INTO pets2 VALUES(NULL,'cat');
INSERT INTO pets2 VALUES(NULL,'dog');
inner join on
产生A和B的交集。
SELECT * FROM pets INNER JOIN pets2 ON pets.name = pets2.name2
结果为:
left [outer] join on
A left join B , left join 是left outer join的简写,left join默认是outer属性的.
产生表A的完全集,而B表中匹配的则有值,没匹配的以null值取代。
。
SELECT * FROM pets LEFT OUTER JOIN pets2 ON pets.name = pets2.name2
结果为:
left [outer] join on where
SELECT * FROM pets LEFT OUTER JOIN pets2 ON pets.name = pets2.name2 WHERE pets2.name2 IS NULL
产生在A表中有而在B表中没有的集合.
结果为:
right [outer] join on
同理,产生表B的完全集,而A表中匹配的则有值,没匹配的以null值取代。
SELECT * FROM pets RIGHT JOIN pets2 ON pets.name = pets2.name2
结果为:
right [outer] join on where
SELECT * FROM pets RIGHT JOIN pets2 ON pets.name = pets2.name2 WHERE pets.name IS NULL
同理…… 产生表B有而表A中没有的集合
结果为:
mysql 不支持 Full outer join.
但了解下,会返回表A和表B的所有行,包括null值
插入当前时间 : now()
insert into `products`(`id`,`name`,`price`,`detail`,`pic`,`createtime`) values (1,'iphone',10000.0,'stupid果蛆',NULL,NOW())