更新表==================================================== ADD COLUMN 给表增加新列 例子:key_middle后增加新列 >ALTER TABLE mysql_testdb.tablename0 >ADD COLUMN new_key char(10) NOT NULL DEFAULT 0 AFTER key_middle; CHANGE COLUMN 修改表的名称或数据类型 例子:new_key重命名及重设类型 >ALTER TABLE mysql_testdb.tablename0 >CHANGE COLUMN new_key key2 char(1) NULL DEFAULT 2; ALTER COLUMN 删除或修改指定默认值 例子:key2修改默认值 >ALTER TABLE mysql_testdb.tablename0 >ALTER COLUMN key2 SET DEFAULT 3; MODIFY COLUMN 修改指定列数据类型 例子:key2修改类型 >ALTER TABLE mysql_testdb.tablename0 >MODIFY COLUMN key2 char(20) FIRST; DROP COLUMN 删除 例子:删除key2列 >ALTER TABLE mysql_testdb.tablename0 >DROP COLUMN key2; 例子:删除表 >DROP TABLE mysql_testdb.tablename0; RENAME TO 修改表名 例子:将tablename0改名为tablename2 >ALTER TABLE mysql_testdb.tablename0 >RENAME TO mysql_testdb.tablename2; 例子:多表改名 >RENAME TABLE tablename0 TO tablename2 >test_table TO tablename3; AFTER index_key 新列放在index_key后位置 FIRST 新列为第一行 查看表======================================= >SHOW TABLE tablename0; 或 >DESC mysql_testdb.tablename0; 索引========================================= 创建索引 通用项: index_col_name : col_name[(length)][ASC|DESC] col_name 索引列名 length 用前多少长度创建索引(有利于减小索引文件大小) ASC|DESC 升序|降序(默认:升序) UNIQUE 指定为唯一索引 index_name 索引名 tbl_name 索引表名 CONSTRAINT 别名 symbol PRIMARY KEY 主键 AUTO_INCREMENT 自增 UNIQUE 唯一索引 FOREIGN 外键 (1)方法一,用于单独创建索引 CREATE [UNIQUE] INDEX index_name ON tbl_name (index_col_name,...) 例子:根据name前三个字符创建一个升序索引 >CREATE INDEX index_name ON mysql_testdb.tablename0(name(3) ASC); 建立成功后,查看索引 >SHOW INDEX FROM mysql_testdb.tablename0 (2)方法二,用于创建新表时候创建索引 创建该表索引 CREATE TABLE {INDEX|KEY} [index_name] (index_col_name,...) 创建主键索引 CREATE TABLE [CONSTRAINT[symbol]] PRIMARY KEY (index_col_name,...) 创建唯一索引 CREATE TABLE [CONSTRAINT[symbol]] UNIQUE [INDEX|KEY] [index_name] (index_col_name,...) 创建外键 CREATE TABLE [CONSTRAINT[symbol]] FOREIGN KEY [index_name] (index_col_name,...) 例子:id与book组成联合主键,count建立索引 >CREATE TABLE tablename4 >( >id int NOT NULL AUTO_INCREMENT >name char(20) NOT NULL >age int(3) NULL >book char(50) NULL >count int(5) NULL >PRIMARY KEY(id, book) >INDEX index_tablename4_count(count); >) (3)方法三,修改表的同时创建索引 添加索引 ALTER TABLE ADD {INDEX|KEY} [index_name] (index_col_name,...) 添加主键 ALTER TABLE ADD [CONSTRAINT[symbol]] PRIMARY KEY (index_col_name,...) 添加唯一索引 ALTER TABLE ADD [CONSTRAINT[symbol]] UNIQUE [INDEX|KEY] [index_name] (index_col_name,...) 添加外键 ALTER TABLE ADD [CONSTRAINT[symbol]] FOREIGN KEY [index_name] (index_col_name,...) 例子:name添加非唯一索引 >ALTER TABLE tablename4 >ADD INDEX index_tablename4_name(name); 查看索引: SHOW {INDEX|INDEXS|KEY} {FROM|IN} tablename [{FROM|IN} db_name] [WHERE expr] 删除索引: DROP INDEX index_name on tablename ALTER TABLE DROP {INDEX|PRIMARY KEY|FOREIGN KEY} 查询: SELECT [ALL|DISINCT|DISTINCTROW] select_expr [,select_expr,...] FROM tablename [WHILE where_condition] [GROUP BY {col_name|expr|position} [ASC|DESC],...[WITH ROLLUP] [HAVING where_condition] [ORDER BY {col_name|expr|position} [ASC|DESC]] [LIMIT {[offset,] row_count|row_count OFFSET offset}] SELECT 要返回的列 ALL|DISINCT|DISTINC TROW 是否返回结果集中的重复行 FROM 从中检索的数据表 WHERE 行级过滤 GROUP BY 分组说明 HAVING 组级过滤 ORDER BY 输出排序顺序 LIMIT 要检索的行数 select_expr 指定查询内容(可表示一个常量/变量/表达式) 单表查询: 例子:(1)查询tablename4中name,age,book信息 >SELECT name,age,book FROM mysql_testdb.tablename4; (2)查询全部信息 >SELECT * FROM mysql_testdb.tablename4 (3)查询结果,判断并取别名 >SELECT name, >CASE WHERE sex='M' THIN '男' >ELSE '女' >END AS 性别 >FROM mysql_testdb.tablename4; (4)将查询结果计算 >SELECT name,sex,age+100 FROM mysql_testdb.tablename4; 多表查询: 交叉连接(笛卡儿积) 例子:得到tb1和tb2的数据 >SELECT * FROM tb1 CROSS JOIN tb2 或者 >SELECT * FROM tb1,tb2) 内链接 SELECT select_expr FROM tb1 INNER JOIN tb2 ON conditions; conditions [tb1.]col_name [运算符] [tb2.]col_name 例子:查询每一个学生及选课信息(等值连接) >SELECT * FROM tb_student INNER JOIN tb_score >ON tb_student.studentID = tb_score.studentID; 外连接 左外连接(一对多): LEFT OUTER JOIN 或者 LEFT JOIN 左边表为基表,右边为参数表 例子:获取表一关于表二的对应的详细数据 >SELECT * FROM tb1 LETF JOIN tb2 ON tb1.studentID = ON tb2.studentID 右外连接: RIGHT OUTER JOIN 或者 RIGHT JOIN 右边为基表,左边为参数表 WHERE查询 (1)比较查询(<=>) (2)判断查询(BETWEEN...AND 和 IN) >SELECT * FROM mysql_testdb.tb1 WHERE id BETWEEN 100 AND 200; 返回id为100到200间的行 >SELECT * FROM mysql_testdb.tb1 WHERE id IN (101,156,234); 返回id为101,156,234的行 (3)判断空值(IS) >SELECT * FROM mysql_testdb.tb1 WHERE age IS NULL; 返回所有age为空值的行 子表查询 例子:获取tb_student对应的tb_score成绩信息大于80分的学生 >SELECT studentID,studentNAME >FROM tb_student >WHERE studentID IN (SELECT studentID FROM tb_score WHERE score>80); 分组: GROUP BY {col_name|expr|position}[ASC|DESC],...[WITH ROLLUP] col_name 分组选择列,可多个列,逗号分隔 expr 分组表达式("COUNT(*)AS '人数'") position 正整数,第几列意思 WITH ROLLUP 汇总作用 例子:(1)每个相同地址的男性人数,女性人数 >SELECT address,sex,COUNT(*)AS '人数' FROM mysql_testdb.tb1 >GROUP BY address,sex; 结果: address sex 人数 北京 F 1 上海 M 4 武汉 F 1 武汉 M 2 (1)每个相同地址的男性人数,女性人数,地区总人数,总人数 >SELECT address,sex,COUNT(*)AS '人数' FROM mysql_testdb.tb1 >GROUP BY address,sex >WITH ROLLUP; 结果: address sex 人数 北京 F 1 北京 NULL 1 上海 M 4 上海 NULL 4 武汉 F 1 武汉 M 2 武汉 NULL 3(地区总人数) NULL NULL 8(总人数) HAVING where_condition 用于过滤组 例子:地区中少于3人的所有客户姓名及地址 >SELECT name,address FROM mysql_testdb.tb1 >GROUP BY address,name >HAVING COUNT(*)<=3; 结果: name address 小黄 北京 小白 武汉 小红 武汉 小绿 武汉 排序 ORDER BY {col_name|expr|position}[ASC|DESC],... 例子: >SELECT name,sex FROM mysql_testdb.tb1 >ORDER BY name DESC ,address DESC; (1)空值默认最小值(2)多个列时,从左到右排序 限制 LIMIT {[offset,]count|count OFFSET offset} 例子:从第5行开始的连续三位 (1) >SELECT id,name FROM mysql_testdb.tb1 >ORDER BY id LIMIT 3 OFFSET 4; (2) >SELECT id,name FROM mysql_testdb.tb1 >ORDER BY id LIMIT 4,3;