一 表操作
1>创建表
1 create table [if not exists] test(id int);
2 create table test as select * from t;
3 select id,name into ctabl1 from ctable;--sqlserver支持
2>修改表
--修改表名
ALTER TABLE chartable RENAME TO chartable1
--修改表 新增列
ALTER TABLE chartable ADD age INT;
--修改表的列类型
ALTER TABLE chartable MODIFY age VARCHAR(20)
--修改列名和列类型
ALTER TABLE chartable CHANGE age age1 DATE;
3>删除表
drop table [if exists] test;
二 表约束
1> not null
2> unique
--在创建表时指定
DROP TABLE IF EXISTS checktest;
CREATE TABLE IF NOT EXISTS checktest(
id INT PRIMARY KEY,
cardid VARCHAR(18) UNIQUE
)
--创建之后指定
CREATE TABLE IF NOT EXISTS checktest(
id INT PRIMARY KEY,
cardid VARCHAR(18)
)
alter table checktest add constraint ui_carid unique(carid)
--删除唯一约束
ALTER TABLE checktest DROP INDEX ui_carid
3> primary key
DROP TABLE IF EXISTS checktest;
--在创建表时指定
CREATE TABLE IF NOT EXISTS checktest(
id INT PRIMARY KEY
)
--创建之后指定
CREATE TABLE IF NOT EXISTS checktest(
id INT
)
alter table checktest add primary key(id)
--删除主键约束
ALTER TABLE checktest DROP PRIMARY KEY
4> check
--5.5之前不支持check 约束 但是保留了check关键字
5> foreign key
--在创建表时指定
CREATE TABLE arcticle(
id INT PRIMARY KEY,
title VARCHAR(20),
content VARCHAR(20),
userid INT REFERENCES userinfo(id)
)
--创建之后指定
alter table arcticle add foreign key(userid) REFERENCES userinfo(id)
--删除外键
alter table arcticle drop foreign key(userid)
6> auto_increment
CREATE TABLE userinfo(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20)
)
三 表crud 【create,read,update,delete】
1>插入
insert into 表名(列1.。。列n) values(值1...值n)
2>更改
update 表名 set 列1=值1,。。。。列n=值n where 条件
3>删除
delete from 表名 where 条件
truncate table 表名
4>查询
select 列名 [as ] 别名 from 表名 where 条件
--多表联合查询
/**笛卡尔积连接**/
SELECT * FROM userinfo,arcticle
/**内连接**/
SELECT * FROM userinfo u INNER JOIN arcticle a ON u.id=a.userid
/**左外连接**/
SELECT * FROM userinfo u LEFT JOIN arcticle a ON u.id=a.userid
/**右外连接**/
SELECT * FROM userinfo u RIGHT JOIN arcticle a ON u.id=a.userid
//全连接 mysql不支持
SELECT * FROM userinfo u FULL JOIN arcticle a ON u.id=a.userid
--集合的操作
INTERSECT 交集
union all --不去重复
union --去重复
--分组 排序
--测试表
CREATE TABLE `userinfo` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(20) COLLATE utf8_bin DEFAULT NULL,
`grade` INT(11) DEFAULT NULL,
`score` INT(11) DEFAULT NULL,
PRIMARY KEY (`id`)
)
CREATE TABLE `arcticle` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(20) COLLATE utf8_bin DEFAULT NULL,
`content` varchar(200) COLLATE utf8_bin DEFAULT NULL,
`userid` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `F_USERINFO` (`userid`),
CONSTRAINT `F_USERINFO` FOREIGN KEY (`userid`) REFERENCES `userinfo` (`id`)
)
/**查询分数最高的用户在哪个班级**/
SELECT grade,MAX(score) FROM userinfo GROUP BY grade HAVING MAX(score)=(SELECT MAX(score) FROM userinfo) order by grade;
--子查询
--表子查询
SELECT * FROM (SELECT * FROM userinfo) t
--列子查询
SELECT title,(SELECT NAME FROM userinfo WHERE id=a.userid) FROM arcticle a;
--条件子查询
SELECT * FROM arcticle WHERE userid=(SELECT id FROM userinfo WHERE NAME='张三')