基本sql语句的操作(增、删、改、查)
库操作:
> show databases; #列出所有的库
> create database db2; #创建库
> show create database db2; #查看所创建库的属性
> use db1; #切换库
> drop database db2; #删除库
表操作:
> show tables; #列出当前库中所有的表
> create table t1 (id int(10),name char(10)); #创建表,至少要有一个字段,多个字段用","隔开
> desc t1; #查看表结构
> show create table t10\G #查看表的创建属性
> alter table t1 rename to t10; #修改表名
> alter table t1 add sex char(10); #添加字段在末位
> alter table t1 add QQ int after name; #添加字段在指定字段的后面 在name字段后面创建一个新的字段
> alter table t1 add uid int first; #添加字段在首位
> alter table t1 drop uid; #删除字段
> alter table t1 change id uid int; #修改字段的名称及属性 将id的字段名改为uid
> alter table t1 modify uid int(10); #修改字段的属性
> drop table t2; #删除表
记录操作:
> insert into t1 set uid=1,name='tom',sex='male'; #添加一条记录
> insert into t1 (uid,name,sex) values (2,'jim','male');
> insert into t1 (uid,name,sex) values (3,'lilei','male'),('4','lily','female'); #添加多条记录
> insert into t1 values (5,'lucy',123,'female'); #注意:列数和值数一定要一样
> update t1 set name='hanmeimei' where uid=6; #修改记录,注意定位
> update t1 set uid=6 where name='lucy' and QQ is null; #多条件定位 and ↔ && or ↔ || not ↔ !
> delete from t1 where uid=6; #删除记录,注意定位 删除和更新不能用子查询
单表查询:
> select * from t1; #查询表中所有字段的所有记录.如果显示很乱,用\G结尾
> select name,qq from t1; #查询部分字段的所有记录
> select name,chinese from t2 where chinese >= 80; #查询部分字段的部分记录
> select name,chinese,english from t2 where chinese >= 80 and english = 100; #多条件定位
> select * from t2 order by chinese; #以指定字段值升序排列
> select * from t2 order by chinese desc; #desc: 逆序
> select * from t2 order by chinese desc limit 2; #只显示前几条记录
> select * from t2 where english=(select max(english) from t2); #子查询
> select * from t2 where name like 't%'; #like通配符 %: 所有 _: 任意单个字符
> select * from t2 where name regexp '^t'; #regexp正则表达式
> select name,chinese+math+english as total from t2; #as设置别名
> select count(name) from t2; #统计name字段有多少记录, null不会被统计
> select count(1) from t2; #统计有多少条记录
> select sex,count(sex) from t1 group by sex; #统计指定字段中相同的值的个数
多表联合查询:
内连接: 两个表某字段的值完全一样,显示两个表同时含有的一样内容
> select t1.name,t1.sex,t2.math from t1 join t2 on t1.name=t2.name;
> select t1.name,t1.sex,t2.math from t1,t2 where t1.name=t2.name;
外连接: 左,右连接,左链接以左表为主,显示左表里面所有的内容;使用外链接时也可以使用where进行定位。
左: 显示出左表中所有的记录
右: 显示出右表中所有的记录
> select t1.name,t1.sex,t2.math from t1 left join t2 on t1.name=t2.name; #左连接 显示左表里有右表没有的内容
> select t2.name,t1.sex,t2.math from t1 right join t2 on t1.name=t2.name; #右连接 显示右表里面有左边没有的内容
char与varchar的区别
char定义的是固定长度,长度范围为0-255,存储时,如果字符数没有达到定义的位数,会在后面用空格补全存入数据库中,在上例中,name实际存储在数据中的数据为'zejin '
varchar是变长长度,长度范围为0-65535,存储时,如果字符没有达到定义的位数,也不会在后面补空格,在上例subject字段中,实际存储在数据中的数据为'zejin ',当然还有一或两个字节来描述该字节长度
一、drop,truncate,delete删除表的区别
1、drop table 表名称 eg: drop table dbo.Sys_Test
2、truncate table 表名称 eg: truncate table dbo.Sys_Test
3、delete from 表名称 where 列名称 = 值 eg: delete from dbo.Sys_Test where test='test'
二、drop,truncate,delete区别
1、drop (删除表):删除内容和定义,释放空间。简单来说就是把整个表去掉.以后要新增数据是不可能的,除非新增一个表。
drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger)索引(index);依赖于该表的存储过程/函数将被保留,但其状态会变为:invalid。
2、truncate (清空表中的数据):删除内容、释放空间但不删除定义(保留表的数据结构)。与drop不同的是,只是清空表数据而已。
注意:truncate 不能删除行数据,要删就要把表清空。
3、delete (删除表中的数据):delete 语句用于删除表中的行。delete语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存
以便进行进行回滚操作。
truncate与不带where的delete :只删除数据,而不删除表的结构(定义)
4、truncate table 删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用delete。
如果要删除表定义及其数据,请使用 drop table 语句。
5、对于由foreign key约束引用的表,不能使用truncate table ,而应使用不带where子句的delete语句。由于truncate table 记录在日志中,所以它不能激活触发器。
6、执行速度,一般来说: drop> truncate > delete。
7、delete语句是数据库操作语言(dml),这个操作会放到 rollback segement 中,事务提交之后才生效;如果有相应的 trigger,执行的时候将被触发。
truncate、drop 是数据库定义语言(ddl),操作立即生效,原数据不放到 rollback segment 中,不能回滚,操作不触发 trigger。
其他常用命令:
查看服务器的运行状态:status
查看数据库的连接数:show processlist;
查看服务器设置:show variables;
关闭数据库的事务提交:set autocommit=0; =1的时候是打开数据库的事务提交