数据库,DDL、DML、DQL01

1、DDL:

drop table 表的表名;       删除某一张表

alter table t_user add COLUMN  字段名 字段的数据类型 字段约束;           //给表中添加新的字段


例如:alter table t_user add COLUMN is_marry int FIRST | AFTER age;


alter table t_user drop gender;   //将表中的某一个字段删除掉


//-------------复制表------无法复制约束---------------
create table t_person select * from t_user;                   //按照老表创建一张格式一样的新表,并将数据同步

alter table t_person add PRIMARY key(id);                     //修改表,将id列设置为主键


alter table 表名 change 老字段 新字段 字段类型 字段约束;     //更改表中字段的名称,类型,约束

例如:
alter table t_user change idcard id_card varchar(18) UNIQUE not null;


//-------------表数据复制------用于来复制两表之间的数据---------------

insert into t_person(user_name,idcard) select user_name,idcard from t_person;


//---------------------索引-------------------------------------------

主键索引:primary key
普通索引:index
唯一索引:unique key
外键索引:foreign key



create index idx_idcard on t_person (idcard);  //给一个表中的字段,添加普通索引

create UNIQUE index uk_idcard on t_person (idcard);       //给某一个表的某个字段添加唯一索引(也叫唯一约束)


create FULLTEXT index ft_address on t_person(address);     //给某一个表中的某个字段添加一个全文索引




//给一个表中的字段,添加组合唯一索引(此时判断的依据是:两个字段如果数据都一致,则违背唯一性)
create unique index uk_login_name on t_person(login_name,telphone);       



alter table t_person drop index idx_idcard;      //根据索引名删除某一个表的某一个索引


	
保证实体完整性的方法:

1、给表添加主键约束
2、给表中的某些字段添加唯一约束



保证列完整性的方法:

1、添加非NULL约束
2、添加默认约束
保证引用的完整性的方法:

1、外键约束

create table t_hus(id int primary key auto_increment,
hus_name varchar(20) not null,fk_wife_id int, 
FOREIGN KEY(fk_wife_id) references t_wife(id));



alter table t_hus add FOREIGN KEY(fk_wife_id) references t_wife(id);

2、DML 数据操作语言

新增:insert into 表(字段列表……)values (值列表……);     //空的用法:NULL(表示啥都不加)           ''(加了一个空字符串)

字段列表中可以省略的列:

1、自增长的ID列
2、设置默认值的列,如果你不想更改默认值,可以不写
3、可以为NULL的列,也可以不写

//以下这种写法,需要注意:不是所有RDBMS都支持
多行新增|批量新增:insert into 表(字段列表……)values (值列表……),(值列表……),(值列表……),……;

如果我们需要将一个表中的数据,复制到另外一张表中:

insert into 表(字段列表……)select 字段列表…… from 其它表;

以下的这种忽略字段类别的写法不推荐:(给自己找麻烦)
insert into t_person values (NULL,'田七','511381195689561231','tianqi',NULL,'13398562345',NULL);      //每一列都必须写齐,而且要跟字段的排序保持一致


--------------------------------------------------------------------------------------------------------------------------------
修改:update 表 set 字段名1=值1,字段名2=值2,字段名3=值3…… where 条件筛选

update t_person set address='九眼桥2号桥洞',telphone='12345678945' where idcard = '511381198612037633';

update t_person set address='九眼桥2号桥洞',telphone='12345678945' where id= '1';

update t_person set address='九眼桥2号桥洞',telphone='12345678945' where login_name= 'zhangsan';



备注:条件筛选出1条数据符合,那么就修改1条数据;如果筛选出多条数据,那么就修改多条数据


--------------------------------------------------------------------------------------------------------------------------------
删除:delete from 表 where 条件筛选


delete from t_person;//删除表中所有的数据

delete from t_person where id = '1';  //删除表中id为1的数据

delete from t_person where id = '1' or id = '4' or id = '7'……;    // ===    delete from t_person where id in ('1','4','7'……);


delete from t_person where id between 1 and 4;   //删除表中id >=1   并且<= 4的数据

delete from t_person where age >= 10 and age < 18;      //删除表中age >=10   并且< 18的数据


删除全部数据:delete from t_person;     |      truncate table t_person; (不推荐)

区别:delete删除机制:一条一条的删,并且在二进制日志中有记录,可以恢复;

     truncate删除机制:全部数据整体删除,不会在二进制日志中存在任何记录,不能恢复;

3、DQL 数据查询语言

//查询  select 字段列表 from 表 where 条件筛选 order by 语句

例如:
select * from t_person where user_name = '张三' ;

执行顺序:

1、先执行from t_person 
2、执行where 条件
3、完成所有列的投影




select login_name,idcard from t_person where user_name = '张三' ;

1、先执行from t_person 
2、执行where 条件
3、完成login_name,idcard列的投影


注意:select *  查询所有的列,否则就写:select 字段1,字段2,字段……



select * from t_person where 1=1 order by id asc;

1、先执行from t_person 
2、执行where 条件
3、完成所有列的投影
4、执行order by语句




select login_name as '登录名',idcard as '身份证' from t_person where 1=1 order by id desc;
//给列取列的别名,是为了让我们更好(更直观)的区分“列”



select user_name,age+10 from t_person;//在投影过程中,针对数值类型的字段,还可以直接参与数学计算,但是底层表中的数据不会发生任何变化



//如果需要在SQL中拼接字符串,需要使用到内置函数concat(,,,……)
select * from t_person where user_name like concat('张','%');

select concat('用户名:',user_name,' 登录名:',login_name,' 年龄:',age) as '个人信息' from t_person;




//------------------------distinct 去重用法------------------------------------------------------------------

distinct 可用于投影去重,即可以作用在单列上,也可以作用在多列上(针对多列,同时去重)

//去重经典例子:完成一个表中数据的去重


create table t_temp select distinct user_name,idcard,login_name,address,telphone,`password`,age from t_person;//表复制

truncate table t_person;//清空原表

ALTER TABLE t_person AUTO_INCREMENT = 1;//将原表重置
//数据复制
insert into t_person(user_name,idcard,login_name,address,telphone,`password`,age) select user_name,idcard,login_name,address,telphone,`password`,age from t_temp;

drop table t_temp;//废弃临时表
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值