SQL语句的基本操作

一、SQL语句的基本操作

废话不多说上干货,请收下!

文件夹:库

create database db1 charset utf8; #会在我们的data文件夹下,创建出一个db1文件夹,编码方式如果不指定会以默认的为准


drop database db1; #指定要删除的数据库就可以直接将其删除

alter database db1 charset gbk; #改数据库一般也就是改其编码方式,指定要改的数据库和编码方式即可修改编码方式

show databases; #查看data文件夹下的所有的文件夹
show create database db1; #查看创建的数据库db1的数据结构,可以看到其指定的编码,

文件:表
切换文件夹
use db1; #创建表之前我们需要先切到具体的文件夹下进行创建表,否则创建的时候mysql不知道你要在哪个文件夹下创建文件就会报错,当然你也可以在创建的表前指定数据库名
select database(); 查看当前所在的库 #可以当前创建的表是在哪个表下进行创建的

create table t1(id int,name char); #创建表一定要指定字段的类型,而且字段不能为空,所有字段放在括号内,并用逗号隔开
create table db1.t1(id int,name char); #如果创建表时没有切换到指定的文件夹下,可以在表名前添加上库名即可

drop table t1; #删除表时直接指定删除的表名即可

alter table t1 add age int; #改是改变表的表结构,add是向表中添加新的字段,并指定字段的类型,不需要用括号
alter table t1 modify name char(15); #modify是修改表中字段的类型,但是不可以修改字段名
alter table t1 change name NAME char(15); #change和modify的区别是可以修改字段的名字,当然也可以修改字段的类型
alter table t1 drop age; #删除表中的某一个字段,一般没有删除字段的需求,因为这样会连同字段下的记录也会一同被删除


show tables; #查看当前库下创建的所有表,查看出的表会显示在哪个库下的
show create table t1; #查看具体的某一个表的表机构但是该表结构看上去有点乱
desc t1; #也是查看表的表结构,但是比上面的方法查看的规整,当然我们也可以用describe t1;来进行查询表的表结构

文件内的一行行内容:记录

insert into t1(id,name) values #向表中插入记录,此时要指定要插入的表名,以及表的字段名,和要插入的字段对应的值,值用括号进行插入,每插入一组值用逗号隔开,最后一组用分号,表示此条语句的结束
(1,'egon'),
(2,'lxx'),
(3,'alex');


delete from db1.t1 where id >= 2; #delete删除记录,要指定要删除哪个表下的记录,并指定条件,进行筛选出自己想要删除的记录,强调这种删除并不会变id值得结构,id并不会重新进行排序,因为如果表中的数据量很大,重新排序显然是不合理的

create table t2(id int primary key auto_incremnt,name char(15)); #创建表的时候一般我们将标的字段id设定成主键,主键的意思就是id不能为空且唯一,并将id设置成自增长,这样进行插入记录的时候就不需要在传入id的值了
insert into t2(name) values
('egon'),
('lxx'),
('wxx'),
('axx'); #向表中插入多条记录,要指定要插入记录的表,插入的多条记录要放在括号内,并且多条记录之间用逗号进行分隔开,最后一条记录以分号进行结束

清空表应该使用:
truncate t2; #清空表不仅清空表中的内容,字段id下次再插入值是也是从1开始增长的,而不会像delete一样,下次插入会接着上次的id的值继续增长,当然字段名不会被删除的

update db1.t1 set name='lxx_dsb' where id=2; #update修改记录的值,set指定要修改字段名直接进行修改,后面可以跟要修改的约束条件,来修改我们想要修改具体的那条记录

select id from db1.t1; #指定要查看表中哪个字段下的记录
select id,name from t1; #我们也可以指定查看多个字段,查看多个字段下的内容
select name,id from t1; #查看多个字段我们可以调换字段的顺序,那么查看的结果也是按照我们查看字段的顺序进行排列,当然这种查看并不会改变我们原有存储时的顺序
select * from t1; #*代表的是查看所有的字段下的记录,会将指定的表下多有字段下的记录查询出来
select * from t1 where id >= 2; #当然我们还可以查询所有字段是加上约束条件,更精准的查询我们想要的记录

一、关于表的详细操作

一、创建表的完整语法
语法:
create table 库名.表名(
字段名1 类型[(宽度) 约束条件],
字段名2 类型[(宽度) 约束条件],
字段名3 类型[(宽度) 约束条件]
); #当然如果我们切换到具体的库下,那么表名前面的库名就可以不用写了,但是创建表一定要指定表的字段名和字段的类型只是不可以省略的!
约束条件:是在数据类型之外对字段附加的额外的限制,当然这种约束条件就是可有可无的了,根据我们的需求而定

注意:
1、最后一个字段之后不能加逗号
2. 在同一张表中,字段名是不能相同
3. 宽度和约束条件可选,字段名和类型是必须的

二、MYSQL中的一些常用数据类型
1、整型:默认是有符号的(即插入的值可以是整数也可以是负数)
create table t3(x tinyint); #字段x的类型是tinyint,tinyint的存储宽的是1个字节,即8bit位,有符号存储范围是(-128,127),无符号存储范围是(0,256)

ps:修改sql_mode为严格模式,必须重启客户端才能生效
set global sql_mode="strict_trans_tables"; #将对表的操作修改成严格模式,这意味着之前有些操作之前不会报错,在严格模式下则会报错
select @@sql_mode; #将严格模式设置为全局模式

create table t4(x tinyint unsigned); #默认的是有符号的,我们加上unsigned,那么就是无符号的,即只能插入整数,如果我们插入的字段值为负数在严格模式下就会报错

强调:整型类型后面的宽度限制的根本不是存储宽度,限制的是显示宽度
create table t5(id int(1));
create table t6(id int(5));

int的存储宽度是4个Bytes,即32个bit,即2**32

无符号最大值为:4294967296-1

有符号最大值:2147483648-1

有符号和无符号的最大数字需要的显示宽度均为10,而针对有符号的最小值则需要11位才能显示完全,所以int类型默认的显示宽度为11是非常合理的

最后:整形类型,其实没有必要指定显示宽度,使用默认的就ok



2、浮点型:
float(255,30)
double(255,30)
decimal(65,30)

create table t8(x float(255,30));
create table t9(x double(255,30));
create table t10(x decimal(65,30));

insert into t8 values(1.111111111111111111111111111111);
insert into t9 values(1.111111111111111111111111111111);
insert into t10 values(1.111111111111111111111111111111);


3、日期类型
year 1999
date 1999-11-11
time 08:30:00
datetime/timestamp 1999-11-11 08:30:00

create table student(
id int primary key auto_increment,
name char(16),
born_year year,
birth date,
class_time time,
reg_time datetime
);
insert into student(name,born_year,birth,class_time,reg_time) values
('egon1',now(),now(),now(),now());

insert into student(name,born_year,birth,class_time,reg_time) values
('egon1',2000,20001111,now(),now());

insert into student(name,born_year,birth,class_time,reg_time) values
('egon1',2000,'2000-11-11',083000,now());

insert into student(name,born_year,birth,class_time,reg_time) values
('egon1',2000,'2000-11-11',"08:30:00",20171111111111);

insert into student(name,born_year,birth,class_time,reg_time) values
('egon1',2000,'2000-11-11',"08:30:00","2017-11-11 11:11:11");

create table t11(x timestamp);
create table t12(x datetime not null default now());


4、字符类型
注意:宽度指限制的是字符个数
char:定长
char(5)

varchar:变长
varchar(5)

相同点:宽度指的都是最大存储的字符个数,超过了都无法正常存储
不同点:
char(5):
'm'--->'m '5个字符

varchar(5)
'm'--->'m'1个字符

set global sql_mode="strict_trans_tables,PAD_CHAR_TO_FULL_LENGTH";

注意:mysql在查询时针对where 字段="值 "会忽略掉右面的空格,即where 字段="值"
如果时like模糊匹配就不会忽略右面的空格了

char(5)
egon |axx |lxx |fm |

varchar(5)
1bytes+egon|1bytes+axx|1bytes+lxx|1bytes+fm|



宽度相关练习
mysql> create table t13(x char(5));
Query OK, 0 rows affected (0.20 sec)

mysql> create table t14(x varchar(5));
Query OK, 0 rows affected (0.27 sec)

mysql>
mysql>
mysql> insert into t13 values('xxxxxx');
ERROR 1406 (22001): Data too long for column 'x' at row 1
mysql> insert into t14 values('xxxxxx');
ERROR 1406 (22001): Data too long for column 'x' at row 1


5、枚举与集合类型
枚举enum('a','b','c'):多选一
集合set('a','b','c'):多选多

create table emp(
name varchar(15),
sex enum('male','female','unkown'),
hobbies set('read','music','yinshi','play')
);

insert into emp values
('zhangming','xxx','xxxx');


mysql> insert into emp values('zhangming','female','read,play');
Query OK, 1 row affected (0.03 sec)

mysql> select * from emp;
+-----------+--------+-----------+
| name | sex | hobbies |
+-----------+--------+-----------+
| zhangming | female | read,play |
+-----------+--------+-----------+
1 row in set (0.00 sec)
三、约束条件
















猜你喜欢

转载自www.cnblogs.com/sui776265233/p/9338373.html