day43
作者:互联网
(1)表操作 (2)表数据类型 # 表操作 # use pycharmdata; # drop table t1; # create table t1(id int,name varchar(8)); # desc t1; # 修改字段 # alter table t1 modify id tinyint; # 修改类型 # alter table t1 change id ID int,change name NAME varchar(10); # 修改字段名和类型 # desc t1; # 增加字段 # alter table t1 add gender varchar(4); # # alter table t1 add gender varchar(4) first ; # 指定加入到第一行 # alter table t1 add level int after ID; # 指定加入到某一字段之后 # alter table t1 drop gender; # 删除字段 # 复制表 # create table t2 select user,host from mysql.user; # 将select user,host from mysql.user的结果保存给t2 # 只复制表结构 # create table t3 select user,host from mysql.user where 1!=1; =======字段类型======= https://www.cnblogs.com/linhaifeng/articles/7233411.html # =======================字段类型======================= # =====整型===== # tinyint int bigint # 强调:整型不需指定宽度,整型的宽度是显示宽度,存储宽度是固定的 # create table t(id tinyint); # desc t; # =====浮点型===== # 精度不同(decimal > double > float) # create table t(x float(255,30),y double(255,30),z decimal(65,30)); # float(总宽度(最大255位),小数位宽度(最大30位)) #(double和float范围一样) # insert t values(1.111111111111111111111111111111,1.111111111111111111111111111111,1.111111111111111111111111111111); # =====日期类型===== # year(年) time(时分秒) date(年月日) datetime(年月日时分秒) timestamp(年月日时分秒) # datetime 默认值为null,timestamp 默认值为当前时间current_timestamp # create table t(y year,t time,d date,dt datetime,ts timestamp); # insert t values(now(),now(),now(),now(),now()); # ex: # create table student( # id int, # name char(10), # born_year year, # bitrh date, # reg_time datetime # ); # # insert student values(1,"aaa","1911","1911-11-11","1911-11-11 11:11:11"); # insert student values(2,"bbb","1988","19881111","19881111111111"); # select * from student; # # timestamp应该用于记录更新时间 # 注意:针对datetime或者timestamp如果是用作注册时间,那么指定not null default now()自动填充时间即可,如果是用作更新时间那么需要额外指定on update now(),该配置timestamp自带 # create table t( # id int, # name varchar(16), # update_time timestamp, -- update_time datetime not null default now() on update now() # reg_time datetime not null default now() # ); # insert into t(id,name) values(1,"aaa"); # select * from t; # update t set name="AAA" where id=1; # update_time会发生改变,reg_time不变 # select * from t; YEAR YYYY(1901/2155) DATE YYYY-MM-DD(1000-01-01/9999-12-31) TIME HH:MM:SS('-838:59:59'/'838:59:59') DATETIME YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59 Y) TIMESTAMP YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某时) 在实际应用的很多场景中,MySQL的这两种日期类型都能够满足我们的需要,存储精度都为秒,但在某些情况下,会展现出他们各自的优劣。下面就来总结一下两种日期类型的区别。 1.DATETIME的日期范围是1001——9999年,TIMESTAMP的时间范围是1970——2038年。 2.DATETIME存储时间与时区无关,TIMESTAMP存储时间与时区有关,显示的值也依赖于时区。在mysql服务器,操作系统以及客户端连接都有时区的设置。 3.DATETIME使用8字节的存储空间,TIMESTAMP的存储空间为4字节。因此,TIMESTAMP比DATETIME的空间利用率更高。 4.DATETIME的默认值为null;TIMESTAMP的字段默认不为空(not null),默认值为当前时间(CURRENT_TIMESTAMP),如果不做特殊处理,并且update语句中没有指定该列的更新值,则默认更新为当前时间。 # =====字符类型===== # char 定长,不够则补全空格 # 特点: # 浪费空间 # 读取速度快 # # varchar 变长,预留1-2bytes来存储真实数据的长度 # 特点: # 节省空间 # 读取速度慢 # ps:当存储的数据量刚好达到存储宽度限制时,其实varchar更费空间 # # 总结:大多数情况下存储的数据量都达不到宽度限制,所以大多数情况下varchar更省空间 # 但省空间不是关键,关键是省空间 会带来io效率的提升,进而提升了查询效率 # create table t11(x char(5)); # create table t12(x varchar(5)); # insert t11 values("hel "); # insert t12 values("hel "); # set sql_mode = "pad_char_to_full_length"; # 临时设置,为下面显示字符实际字符个数 # select char_length(x) from t11; # char_length()查看字符个数 # select char_length(x) from t12; # select length(x) from t11; # length()查看字节个数 # select length(x) from t12; # 1. char填充空格来满足固定长度,但是在查询时却会很不要脸地删除尾部的空格(装作自己好像没有浪费过空间一样),然后修改sql_mode让其现出原形 # 2. 虽然 CHAR 和 VARCHAR 的存储方式不太相同,但是对于两个字符串的比较,都只比较其值,忽略 CHAR 值存在的右填充,即使将 SQL _MODE 设置为 PAD_CHAR_TO_FULL_LENGTH 也一样,,但这不适用于like # =====枚举类型和集合类型===== # 枚举类型enum("a","b","c","d") 多选一 # 集合类型set("a","b","c","d") 多选多 # # CREATE TABLE shirts ( # name VARCHAR(40), # size ENUM('x-small', 'small', 'medium', 'large', 'x-large') # ); # INSERT INTO shirts(name, size) VALUES ('dress shirt','large'), ('t-shirt','medium'),('polo shirt','small'); # select * from shirts; # # CREATE TABLE user ( # name VARCHAR(16), # hobbies set("read","smoke","drink","tang") # ); # insert user values("aaa","tang,smoke"); # insert user values("bbb","play"); # 若传的值不在集合中,那么字段下就没有值 # select * from user;
标签:create,t1,user,table,now,day43,select 来源: https://www.cnblogs.com/bronya/p/13604290.html