Mysql常用语句
SELECT[ALL|DISTINCT|DISTINCTROW|TOP]
{*|talbe.*|[table.]field1[AS alias1][,[table.]field2[AS alias2][,…]]}
FROM tableexpression[,…][IN externaldatabase]
[WHERE…]
[GROUP BY…]
[HAVING…]
[ORDER BY…]
[WITH OWNERACCESS OPTION]
-- 顺序不能有错
-- 表和字段可以取别名
创建表
-
create table xxx( 字段名1 类型[] 约束, 字段名2 类型[] 约束, 字段名3 类型[] 约束, ... 最后一行不用加',' key 外键约束名 (字段民) )
-
create table 新表 select * from 被复制的表 采用这种方式只能复制数据,不能复制其相关约束,例如主键等约束
删除表
1.delete
删除某几行
delete from 表名 [条件]
2.drop
删除表数据和结构
alter table 表名 drop 字段名
3.truncate
只删除所有数据,不删除结构
truncate table 表名称
添加外键约束
1,sql语句创建表的同时添加外键约束
CREATE TABLE tb_UserAndRole --用户角色表
(
ID INT PRIMARY KEY IDENTITY(1,1),
UserID INT NOT NULL,--用户ID
RoleID INT NOT NULL,--角色ID
foreign key(UserID) references tb_Users(ID)--tb_Users表的ID作为tb_UserAndRole表的外键
)
2、添加外键约束(关联字段要用括号括起来)
ALTER TABLE 从表 ADD CONSTRAINT 约束名 FOREIGN KEY (关联字段) references 主表(关联字段);
例如:
ALTER TABLE tb_UserAndRole ADD CONSTRAINT FK__tb_UandR_Role FOREIGN KEY (RoleID) references tb_Role(ID);
Insert 插入语句
insert into 表名 (字段一,子段2) values (值一,值二),(值一,值二)
insert into student(id,name) values (1,'李明'),(2,'李白')
字段可以省略但是后面的值必须要一一对应
alter添加列
alter table 表名 add column 新字段
例:
alter table stuednt add column sex char(1) not null comment'性别'
alter修改列
alter table students change gender 性别 varchar(4);
alter table students change column gender 性别 varchar(4);
两种方式皆可
alter table 表名 change ( column)原列名 新列名 列类型;
alte删除列
alter table students drop column 列名;
update修改语句
update student set name="yhq" where id='1'
update 表名 set 字段=新名字 where 字段=条件
多个属性用,隔开
update 表名 set 字段一=' ', 字段二=' ' where 条件
条件where
between .. and .. 双闭区间
多个条件用 and
拼接
SELECT CONCAT('姓名:',Sname) AS 新名字 FROM student
去重
select distinct '字段' from table
like结合%
select '字段' from table where 字段 Like '刘%' 查询性刘的同学
select '字段' from table where 字段 Like '刘_' 查询刘后面一个字的
查询 年龄在 11,12,13的学生
select '字段' from table where age in(11,12,13)
in中不能使用%,_等类似查询的符号
联合查询
select (字段1,字段2...) from 表一 INNER join 表二 on 表1.字段=表2.字段
查询字段时,如两个表中都有相同的字段,差需标记清楚是哪个表的字段,例如
select student.id from student inner join grade on student.id=grade.id
左联合查询
select (字段1,字段2...) from 表一 left join 表二 on 表1.字段=表2.字段
表一的所有属性都会显示,无论是否能在表二中找到对应的
右联合查询right
select (字段1,字段2...) from 表一 right join 表二 on 表1.字段=表2.字段
表二的所有属性都会显示,无论是否能在表一中找到对应的
自连接
本质是将一个表拆分成两个表
原表
select a.Sname as '父类学科',b.Sname as '子类学科' from
subject as a ,subject as b where a.subjectid=b.pid
查询结果
分页(limit)和排序(order by)
在select语句最后面加入即可
order by 字段 asc 升序
order by 字段 desc 降序
LimIt 当前页 ,页面的大小
limit 1,5 每页5条数据 从第1条数据开始显示
md5加密
-- 在插入的时候加密
insert into 表名 values (值一,值二,MD5(要加密的值))
在select语句最后面加入即可
order by 字段 asc 升序
order by 字段 desc 降序
LimIt 当前页 ,页面的大小
limit 1,5 每页5条数据 从第1条数据开始显示
md5加密
-- 在插入的时候加密
insert into 表名 values (值一,值二,MD5(要加密的值))