美文网首页
Day03-p.m.-SQL-DML应用

Day03-p.m.-SQL-DML应用

作者: 驮着集装箱的鲸鱼 | 来源:发表于2019-06-18 07:34 被阅读0次

(2)改表
1. 改表结构(添加列、删除列)
添加列

例子 1:
-- 在oldguo表中添加一个手机号17612093732
SQL语句:
alter table oldguo add telnum char(11) not null unique comment '手机号';
例子 2:
-- 在上表中加一个状态列state,非空,默认值为1.
SQL语句:
alter table oldguo add state tinyint  unsigned not null default 1 comment '状态列';

删除列(不代表生产操作,生产环境禁用)

例子 3:
-- 删除state列
SQL语句:
alter table oldguo drop state;

注意:ALTER TABLE会对生产环境造成比较大的影响,添加列的时候,会把全表进行锁定,当表锁定后,除了查询,其他什么操作都不能用。

ALTER TABLE应用场景:

(1)业务不繁忙期间。
(2)online-DDL(pt-osc),在线更改,不锁表。(自行扩展)

查列

-- 查询所有列
desc oldguo;

指定位置添加列
-- 在name后添加qq列

alter table oldguo add qq varchar(255) not null unique comment 'QQ' after name;

-- 在name前添加wechat列

alter table oldguo add wechat varchar(255) not null unique comment '微信' after ID;

-- 在首列添加学号列:sid(linux_58_00001)

alter table oldguo add sid varchar(255) not null unique comment '学号' first;

-- 修改name数据类型属性(修改属性:modify)

alter table oldguo modify name varchar(128) not null;
注意:用modify改变属性,属性会完全变成SQL语句中定义的属性,原表中的属性将不会存在。

-- 将gender改为gg 数据类型改为char类型:change

ALTER TABLE oldguo CHANGE gender g CHAR(1) NOT NULL DEFAULT 'n' ;

批量更改,在每张表上加个列

alter table 表名 add state tinyint not null default 1;
select concat("alter table",table_name," add state tinyint not null default 1") form information_schema.tables where table_schema='world';

-- 删除刚才所有添加某1列

alter table oldguo drop sid;
注意:删除列时,会把列的数据也全部删掉

查看表语句

use oldboy;
desc oldguo; #查看表的列信息
show create table oldguo; #查看具体建表语句

-- 创建相同表结构的空表

use oldboy;
create table oguo like oldguo;

(3)删表

drop table table_name;

7.2 DML 数据操作语言(针对数据行的操作)(insert、update、delete)

7.2.1 insert

(1)最简单的插入方法

insert into oldguo values(1,'oldguo','1184964356',18);

(2)最规范的插入方法(重点记忆)

insert into oldguo(name,qq,age) values ('oldboy','74110',49);

(3)查询全表数据(不代表生产操作)

select * from oldgou;

7.2.2 update(更新数据行的值)

select * from oldguo;
update oldguo set qq='123456' where id=5;#改指定行的值
update oldguo set qq='123456';#改全表qq列的值

7.2.3 delete(删除行)

delete from oldguo where id=2;#删除指定行
delete from oldguo;#删除这个表中的所有数据

需求:将一个大表全部数据清空(delete、truncate)

delete from oldguo;#逐行删除,速度慢,而且不会删除自增长的值(逻辑删除)
truncate table oldguo;#(物理删除)删除表段里面所有的区(所有数据)

面试题:
delete和truncate的区别

1. delete 逻辑逐行删除,不会降低自增长的起始值,效率很低,而且碎片比较多,会影响到性能。如果有经常性的delete操作,也会产生碎片。
2. truncate,属于物理删除,原理是将表段中的区清空,不会产生碎片,性能较高。但是truncate只能进行“全表删除”

需求:使用update替代delete,进行"伪删除(查不到,没有真正删除)"
1. 添加状态列 (1)存在 (0)代表删除

alter table oldguo add state tinyint not noull default 0 ;

2. 使用update模拟delete

delete from oldguo where id=6;
替换为
update oldguo set state=1 where id=6;

3. 业务句修改

select * from oldguo;
改为
select * from set state=1 where state=0;

作业 :
1. 按需求创建一下表结构:

use school
student :学生表
sno:    学号
sname:学生姓名
sage: 学生年龄
ssex: 学生性别

teacher :教师表
tno:     教师编号
tname:教师名字

course :课程表
cno:  课程编号
cname:课程名字
tno:  教师编号

score  :成绩表
sno:  学号
cno:  课程编号
score:成绩

2.录入数据

INSERT INTO student(sno,sname,sage,ssex)
VALUES (1,'zhang3',18,'m');

INSERT INTO student(sno,sname,sage,ssex)
VALUES
(2,'zhang4',18,'m'),
(3,'li4',18,'m'),
(4,'wang5',19,'f');

INSERT INTO student
VALUES
(5,'zh4',18,'m'),
(6,'zhao4',18,'m'),
(7,'ma6',19,'f');

INSERT INTO student(sname,sage,ssex)
VALUES
('oldboy',20,'m'),
('oldgirl',20,'f'),
('oldp',25,'m');

INSERT INTO teacher(tno,tname) VALUES
(101,'oldboy'),
(102,'hesw'),
(103,'oldguo');

DESC course;
INSERT INTO course(cno,cname,tno)
VALUES
(1001,'linux',101),
(1002,'python',102),
(1003,'mysql',103);

DESC sc;
INSERT INTO sc(sno,cno,score)
VALUES
(1,1001,80),
(1,1002,59),
(2,1002,90),
(2,1003,100),
(3,1001,99),
(3,1003,40),
(4,1001,79),
(4,1002,61),
(4,1003,99),
(5,1003,40),
(6,1001,89),
(6,1003,77),
(7,1001,67),
(7,1003,82),
(8,1001,70),
(9,1003,80),
(10,1003,96);

查看结果

SELECT * FROM student;
SELECT * FROM teacher;
SELECT * FROM course;
SELECT * FROM sc;

7.3 DQL (预习)

select 
show

相关文章

  • Day03-p.m.-SQL-DML应用

    (2)改表1. 改表结构(添加列、删除列)添加列 删除列(不代表生产操作,生产环境禁用) 注意:ALTER TAB...

  • 应用

    【应用】 $应用$ 【应用名称】王者荣耀【应用名称】 【应用介绍】5v5对战手游【应用介绍】 $应用$ 【应用名称...

  • Day17 - Flutter - 应用信息配置

    概述 应用标识 应用名称 应用图标 应用启动图 一、应用标识 1.1. Android应用标识Android应用标...

  • 程序员必须掌握的英语单词

    application 应用程式 应用、应用程序application framework 应用程式框架、应用框架...

  • 程序员600词

    application 应用程式 应用、应用程序application framework 应用程式框架、应用框架...

  • 2018-12-01

    application 应用程式 应用、应用程序 application framework 应用程式框架、应用框...

  • 拍砖推荐(收藏了慢慢看)!!!

    application 应用程式 应用、应用程序application framework 应用程式框架、应用框架...

  • words for IT guys

    application 应用程式 应用、应用程序 application framework 应用程式框架、应用框...

  • 程序员必会的600个英文单词

    application 应用程式 应用、应用程序 application framework 应用程式框架、应用框...

  • 程序员必备词汇

    application 应用程式 应用、应用程序 application framework 应用程式框架、应用框...

网友评论

      本文标题:Day03-p.m.-SQL-DML应用

      本文链接:https://www.haomeiwen.com/subject/zwmafctx.html