day43 修改表 表的字段类型

tech2022-09-14  108

上节课复习: 1、数据库相关概念 记录=》表中一行内容 字段=》表格的标题 表=》文件 库=》文件夹 数据库管理软件=》mysql 数据库服务器=》运行有数据库管理软件服务端的计算机 2、基本管理 3、sql语句 库 create database db1 charset utf8mb4;创建库 show databases;查看库 +--------------------+ | Database | +--------------------+ | information_schema | | db1 | | mysql | | performance_schema | | test | +--------------------+ show create database db1;查看某个库 +----------+----------------------------------------------------------------+ | Database | Create Database | +----------+----------------------------------------------------------------+ | db1 | CREATE DATABASE `db1` /*!40100 DEFAULT CHARACTER SET latin1 */ | +----------+----------------------------------------------------------------+ select database(); +------------+ | database() | +------------+ | NULL | +------------+ alter database db1 charset gbk;修改库编码 drop database db1;删除库 表 use db1选择库 create table t1(id int,name char);创建表 show tables;查看库中的表 show create table t1; +-------+-----------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +-------+-----------------------------------------------------------------------------------------------------------------------+ | t2 | CREATE TABLE `t2` ( `id` int(11) DEFAULT NULL, `name` char(1) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1 | +-------+-----------------------------------------------------------------------------------------------------------------------+ desc t1;查看库 +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | name | char(1) | YES | | NULL | | +-------+---------+------+-----+---------+-------+ alter table t1 rename t2;改变表名 alter table t1 modify id tinyint;改变表中表头输入数据格式 drop table t1;删除表 记录 insert t1(id,name) values 插入表中的数据 (1,"aaa"), (2,"bbb"), (3,"ccc"); select id from t1 where id>1;查看表中的数据 update t1 set name="AAA" where id>=2;更新表中的数据 delete from t1 where id=1;清空表中某个字段的数据 truncate t1;清空表中数据 存储引擎 innodb存储引擎负责处理innodb类型的表 今日内容:表详细操作 1、数据类型 2、约束条件 foreign key 多对一 多对多 一对一

1.修改表

create table t1(id int,name char);创建表(括号内创建字段名和类型) alter table t1 rename tt1;修改表名 # 修改字段 alter table t1 modify id tinyint;修改表某个字段数据类型 alter table t1 change id ID tinyint;修改表某个字段名字和数据类型 alter table t1 change id ID tinyint,change name NAME char(4);修改表多个字段名字和数据类型 # 增加字段 alter table t1 add gender char(4);增加表某个字段名称和属性 alter table t1 add gender char(4) first;增加表某个字段名称和属性,位置 alter table t1 add level int after ID;增加表某个字段名称和属性,位置 # 删除字段 alter table t1 drop gender;删除表中某个字段的值 # 复制表 create table t2 select user,host,password from mysql.user;复制硬盘中某个表中数据到新创建表中 # 只复制表结构 create table t3 select user,host,password from mysql.user where 1!=1;复制硬盘中某个表结构到新表中

2.表字段的类型

# 1、=====================表字段类型之整型======================= 强调:整型的宽度是显示宽度,无需设置,存储宽度是固定死的!!!! mysql> create table t5(id tinyint) mysql> desc t4;下面括号中的4是显示宽度 +-------+------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+------------+------+-----+---------+-------+ | id | tinyint(4) | YES | | NULL | | +-------+------------+------+-----+---------+-------+ 1 row in set (0.01 sec) mysql> insert t4 values(128); ERROR 1264 (22003): Out of range value for column 'id' at row 1 mysql> mysql> mysql> insert t4 values(127); Query OK, 1 row affected (0.05 sec) mysql> select * from t4; +------+ | id | +------+ | 127 | +------+ 1 row in set (0.00 sec) mysql> # 2、=====================表字段类型之浮点类型======================= create table t7(x float(255,30),y double(255,30),z decimal(65,30));第一个数字是整数显示宽度,第二个数字为小数显示宽度 insert t7 values (1.111111111111111111111111111111,1.111111111111111111111111111111,1.111111111111111111111111111111); # 3、=====================表字段类型之日期类型====================== year(1901/2155) time 时::秒 ('-838:59:59'/'838:59:59') date 年::日 (1000-01-01/9999-12-31) datetime 年::日 时::1000-01-01 00:00:00/9999-12-31 23:59:59 timestamp 年::日 时::1970-01-01 00:00:00/2037 create table t8(y year,t time,d date,dt datetime,ts timestamp); insert t8 values(now(),now(),now(),now(),now()); create table student( id int, name char(10), born_year year, bitrh date, reg_time datetime ); insert student values (1,"wangjing","1911","1911-11-11","1911-11-11 11:11:11"), (2,"lxx","1988","1988-11-11","1988-11-11 11:11:11"); insert student values (3,"wangjing","1911","19111111","19111111111111"); # 注意:timestamp应该勇于记录更新时间 create table t9( id int, name varchar(16), -- update_time datetime not null default now() on update now(), update_time timestamp, reg_time datetime not null default now() ); insert into t9(id,name) values(1,"egon"); # 测试效果 mysql> select * from t9; +------+------+---------------------+---------------------+ | id | name | update_time | reg_time | +------+------+---------------------+---------------------+ | 1 | egon | 2020-09-01 16:45:51 | 2020-09-01 16:45:51 | +------+------+---------------------+---------------------+ 1 row in set (0.00 sec) mysql> update t9 set name="EGON" where id=1; Query OK, 1 row affected (0.06 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> select * from t9; +------+------+---------------------+---------------------+ | id | name | update_time | reg_time | +------+------+---------------------+---------------------+ | 1 | EGON | 2020-09-01 16:46:50 | 2020-09-01 16:45:51 | +------+------+---------------------+---------------------+ 1 row in set (0.00 sec) mysql> # 4、=====================表字段类型之字符类型====================== char 定长,不够则补全空格 看起来特点: 浪费空间 读取速度快 varchar 变长,预留1-2bytes来存储真实数据的长度 看起来特点: 节省空间 读取速度慢 ps:在存储的数据量刚好达到存储宽度限制时,其实varchar更费空间 总结:大多数情况下存储的数据量都达不到宽度限制,所以大多数情况下varchar更省空间 但省空间不是关键,关键是省空间 会带来io效率的提升,进而提升了查询效率 ab |abc |abcd | 1bytes+ab|1bytes+abc|1bytes+abcd| ===============验证 create table t11(x char(5)); create table t12(x varchar(5)); insert t11 values("我擦嘞 "); -- "我擦嘞 " insert t12 values("我擦嘞 "); -- "我擦嘞 " t11=>字符个数 5 字节个数 11 t12=>字符个数 4 字节个数 10 set sql_mode="pad_char_to_full_length"; select char_length(x) from t11; select char_length(x) from t12; select length(x) from t11; select length(x) from t12; # 5、=====================表字段类型之枚举类型与集合====================== 枚举类型enum("a","b","c","d") 多选1 集合类型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'); CREATE TABLE user ( name VARCHAR(16), hobbies set("read","chou","drink","tang") ); insert user values("lxx","tang,chou"); insert user values("hxx","tangchou");
最新回复(0)