2020-08-06

2020-08-06
初学数据库

DDL 数据定义语言 库|表

创建数据库

CREATE DATABASE java;

创建学生表

create table stu (	
	sid int,	
	sname varchar(20),	
	sage int,	
	birthday date,	
	score double(5,2)
);

– 添加 列–
alter table 表名 add 列名 类型(长度);
– 给stu添加性别字段alter table stu add sex char(1);
– 删除列–
alter table 表名 drop 列名;
alter table stu drop sex;
– 列更名+类型–
alter table 表名 change 旧列名 新列名 类型(长度);

alter table stu change sage stuage varchar(10);

– 表改名

rename table stu to stuuu;

– 表删除

drop table stu2;

– 查看表结构/查看建表语句

show create table stu;

DML 数据操作 -对表中数据的增删改

插入insert into 表名 (字段1,字段2,…) values (值1,值2,…);
1 插入的字段个数任意,顺序与原表无关
2 值的顺序与字段顺序一致
3 插入的数字:直接写数字即可 字符串和日期需要使用单引号 ‘’
4 插入空值时,传入null
5 插入全表数据时,还可以省略写字段,默认插入全表数据
insert into stu values(值1,值2,…);
那么后续的值的顺序与原表字段一致

  -- 插入学生学号,姓名,年龄
  insert into stu (sid,sname,sage) values (1,'张三',18);
  insert into stu (sage,sname,sid,sbirthday)  values (2,'李四',18,'2020-08-06');
  insert into stu (sage,sname,sid,sbirthday)  values (19,'王五',3,null);
  insert into stu (sid,sname,sage,sbirthday,score) values (4,'赵六',20,null,99.2);
  insert into stu values (5,'周期',21,null,100); 
  

增加数据- 插入insert into 表名 (字段1,字段2,…) values (值1,值2,…);
1 插入的字段个数任意,顺序与原表无关
2 值的顺序与字段顺序一致
3 插入的数字:直接写数字即可 字符串和日期需要使用单引号 ‘’
4 插入空值时,传入null
5 插入全表数据时,还可以省略写字段,默认插入全表数据 insert into stu values(值1,值2,…);那么后续的值的顺序与原表字段一致


```sql
-- 插入学生学号,姓名,年龄
insert into stu (sid,sname,sage) values (1,'张三',18);
insert into stu (sage,sname,sid,sbirthday)  values (2,'李四',18,'2020-08-06');
insert into stu (sage,sname,sid,sbirthday)   values (19,'王五',3,null)insert into stu (sid,sname,sage,sbirthday,score)  values (4,'赵六',20,null,99.2);
insert into stu values (5,'周期',21,null,100);

修改数据:

更新
修改单个字段: update 表名 set 字段 = 值 [where 字段 = 值];
修改多个字段: update 表名 set 字段1 = 值1,字段2 = 值2 [where 字段 = 值];
特别注意 : 不加后面的where过滤条件,更新全表 加上where后的条件,只更新符合条件的 根据where后的条件如果找不到数据,那就不更新*/

-- 将学号为1的学生年龄改为20
update stu set sage = 20 where sid = 10;
-- 将年龄为20的学生生日改为2020-01-01
update stu set sbirthday = '2020-01-01' where sage = 20;
-- 将学号为4的学生姓名改为张飞,生日改为2020-01-01
update stu set sname = '张飞',sbirthday = '2020-01-01' where sid = 4; 

删除delete from 表 [where 字段 = 值];
特别注意: 不加where条件,会删除全表数据,慎用!

-- 删除学号为5的学生信息
delete from stu where sid = 5;
-- 删除年龄为20的学生信息
delete from stu where sage = 20;
-- 删全表
delete from stu;

约束

create table stu (	
	sid int [约束],	
	sname varchar(20) [约束],	
	sage int,	birthday date,
	score double(5,2)
);	

约束该列数据存储时的限制.在创建表的时候指定该列的限制条件 , 后续也可以更改.

主键

主键primary key:设置主键的列,不能为空,且唯一
一半给id列设置主键

-- 主键设置方法1
CREATE TABLE s1(
 id int PRIMARY KEY,
 name varchar (10)
);
-- 主键设置方法2
CREATE TABLE s2(
 id int ,
 name varchar (10),
 PRIMARY KEY(id)
);

– 设置联合主键
– 主键不能为空 ,插入时,必须指定主键
– 报错:主键没有值且不能重复 INSERT INTO s1(name) VALUES(1,‘张三’);
– INSERT INTO s1(id,name) VALUES(1,‘李四’); 插入成功
报错:因为已经有id = 1 的行数据了, INSERT INTO s1(id,name) VALUES(1,‘张三’);

自增:auto_increment 列自动增长,一般配合主键使用
当主键设置了自增,在插入时就可以不指定主键值,使其自增,每次自增1

CREATE TABLE s3(
	 id int PRIMARY KEY auto_increment,
 	name varchar(10)
	);
INSERT INTO s3(name) VALUES('zs');
#执行三次后 执行删除,再执行插入
-- 当删除一行后数据后,继续使用自增,还是会从删除的数据之后进行自增
DELETE FROM s3 WHERE id = 3;
-
  • =============================================
/*
唯一 UNIQUE:让该列数据唯一,不重复
*/
CREATE TABLE s4(
 id int primary key auto_increment,
 name varchar(10) unique
);
--语句执行,自增执行,最后name重复导致数据没有插入成功,但是自增已经执行,
-- 下次再执行,就不会按照元彪的顺序继续
-- 执行两次 表中有一个name为 ls 的数据,但是自增执行了两次,因为name是唯一unique 不能重复
INSERT INTO s4(name) VALUES('ls');
-- 执行一次,但是id 为 3 因为中间一次插入没有成功,但是已经自增
INSERT INTO s4(name) VALUES('zs');

不为空 NOT NULL:该列的值,在插入时不能为空

CREATE TABLE s5(
 id int PRIMARY KEY auto_increment,
 name VARCHAR(10)  UNIQUE,
 age INT NOT NULL
);
-- 报错:插入时没有指定age的值, age 的约束条件为 NOT NULL 
-- INSERT INTO s5(name) VALUES('zs');

默认值 DEFAULT:插入数据时,没有指定该列,就会填充上默认值

CREATE TABLE s6(
 id INT PRIMARY KEY auto_increment,
 name VARCHAR(10) UNIQUE,-- 可以设置默认值 DEFAULT 'admin';
 age INT NOT NULL DEFAULT 0 -- 当不指定age时,默认就是0
);
INSERT INTO s6(name ) VALUES('ls');

注释:comment 在建表时给列指定注释,如果有约束,放在约束后
再该表的对象信息的DDL中查看

*/
CREATE TABLE s7(
 id int PRIMARY KEY auto_increment COMMENT '主键id',
 name VARCHAR(10) UNIQUE DEFAULT 'admin'COMMENT '默认值 admin',
 age INT NOT NULL DEFAULT 0 COMMENT '默认值0'
);
/*
查询 select:返回从表中查出的数据,返回到的是一张虚拟表
基本查询: SELECT 字段1,字段2,... FROM 表名;
 1)字段顺序与原表无关
 2)字段个数根据需求而定
 3)返回的虚拟表字段顺序与原表无关,与select后的字段顺序有关
*/
-- 查询所有列: SELECT * FROM 表名
SELECT sid,sname,age,gender,score,cid,groupLeaderId FROM stu;
-- 查询指定列
-- 查询学生学号和姓名
SELECT sid,sname FROM stu;
-- 查询学生学号和成绩
SELECT sid,score FROM stu;
-- ========================================
/*
条件查询:返回符合条件的数据
 条件查询需要在 基础查询语句后,使用where 字段 运算符 值;
 条件查询关系符号: > < >= <= != = 
 and, 
 or ,
 in (set) (set)是说in后是集合,集合数据不重复,查询的数据满足集合中的条件,即可返回
 not in , 
 butween and,
*/
-- 查询学号为1的学生信息
SELECT * FROM stu WHERE sid = 1001;
-- 查询学生性别为女,并且年龄小于50的记录
SELECT * FROM stu WHERE  gender = '女'AND age<50;
-- 查询学生学号为1001,或者姓名为李四的记录
SELECT * FROM stu WHERE sid = 1001 OR sname = '李四';
-- 查询学号为1001,1002,1003的记录
-- SELECT * FROM stu WHERE sid=1001 OR sid=1002 OR sid=1003;
SELECT WHERE sid IN(1001,1002,1003); * FROM stu
-- 查询学号不是1001,1002,1003的记录
-- SELECT * FROM stu WHERE sid != 1001 AND sid != 1002 AND sid !=1003;
SELECT * FROM stu WHERE sid NOT IN(1001,1002,1003);
-- 查询学生年龄在20到40之间的学生记录
SELECT * FROM stu WHERE age BETWEEN  20 AND 40;
-- 查询性别非男的学生记录
SELECT * FROM stu WHERE gender != '男';
-- 查询学生分数大于60的学生id 姓名 分数,
SELECT sid ,sname,score FROM stu WHERE score >60;
-- ======================================================
/*
模糊查询 WHERE 字段 LIKE '%或者_值'
% 匹配任意个数的字符  
 %张->以'张'结尾,前边任意
 张%->以'张'开头,后边任意
 %张% ->只要内容包含'张' 即可。
_匹配一个任意字符
*/
-- 查询姓名以'张'开头的学生记录
SELECT * FROM stu WHERE sname LIKE '%张'; -- %张 以张结尾
SELECT * FROM stu WHERE sname LIKE '张%'; -- 以张开头, 后面任意
SELECT * FROM stu WHERE sname LIKE '_张'; -- 以张开头 一个_代表一个字
SELECT * FROM stu WHERE sname LIKE '张_'; --
-- 查询姓名中包含“三”的学生记录
SELECT * FROM stu WHERE sname like '%三%';
-- ============================================
/*
排序查询 基础查询后使用, ORDER BY 字段 排序类型;
排序类型: 升序 ASC,降序 DESC  
 默认是升序,可以不写
注意:如果没有条件查询,ORDER BY放在基础查询后,如果有条件查询,
   规定必须要放在条件查询后
*/
-- 查询所有学生记录,按年龄升序排序
SELECT * FROM stu ORDER BY age;
-- 查询所有学生记录,按年龄降序排序
SELECT * FROM stu ORDER BY age DESC;
-- 查询所有学生记录,按年龄升序排序,如果年龄相同时,按编号降序排序
SELECT * FROM stu ORDER BY age ,sid DESC; 
-- 查询成绩达于60的学生id,姓名,成绩,并根据成绩降序
SELECT * FROM stu WHERE score>60 ORDER BY score desc ;

加油

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值