您的当前位置:首页>全部文章>文章详情

【MySQL】表操作

CrazyPanda发表于:2024-06-21 17:36:05浏览:272次TAG: #mysql

一、什么是表

表相当于文件,表中的一条记录就相当于文件的一行内容,不同的是,表中的一条记录有对应的标题,称为表的字段

二、创建表

语法

CREATE TABLE 表名(

字段名1  类型[(宽度)约束条件],
字段名1  类型[(宽度)约束条件],
字段名1  类型[(宽度)约束条件]

)ENGINE=innodb DEFAULT CHARSET utf8;

create table student(
    id int not null auto_increment primary key,
    name varchar(255) not null,
    age int not null,
    sex enum('男','女') not null default '男',
    salary double(10,2) not null   
)engine=innodb default charset=utf8


ps : not null :表示此列不能为空
       auto_increment:表示自增,默认每次增长 +1注意:自增长只能添加在主键或者唯一索引字段上


primary key :表示主键(唯一且不为空)
engin=innodb:表示指定当前的存储引擎
default charset utf8:设置表的默认编码集


主键,一种特殊的唯一索引,不允许有空值,如果主键使用单个列,则它的值必须唯一,如果是多列,则其组合必须唯一。

create table tb1(
                nid int not null auto_increment primary key,
                num int null
            )
            或
            create table tb1(
                nid int not null,
                num int not null,
                primary key(nid,num)
            )


自增,如果为某列设置自增列,插入数据时无需设置此列,默认将自增(表中只能有一个自增列)

create table tb1(
                nid int not null auto_increment primary key,
                num int null
            )
            或
            create table tb1(
                nid int not null auto_increment,
                num int null,
                index(nid)
            )


注意:1、对于自增列,必须是索引(含主键)。         2、对于自增可以设置步长和起始值

show session variables like 'auto_inc%';     set session auto_increment_increment=2;     set session auto_increment_offset=10;

show global  variables like 'auto_inc%';      set global auto_increment_increment=2;      set global auto_increment_offset=10;

三、查询表数据

1.查询表数据

语法

select 字段(多个‘,’间隔)from 表名;

例子

select  name,sex from student
或者:select * from student

2.查看表结构

语法

desc 表名

例子

desc student

3.查看创建表信息

语法

show create table 表名;

例子

show create table student; 

 
四、修改表的结构

添加表字段
alter table 表名 add 字段名 类型 约束;
例如: alter table student add age int not null default 0 after name;
ps: after name 表示在name字段后添加字段 age.
  
修改表字段
方式一: alter table student modify 字段 varchar(100) null;
方式二: alter table student change 旧字段 新字段 int not null default 0;


ps:二者区别:
change 可以改变字段名字和属性
modify只能改变字段的属性
    
删除表字段 :
alter table student drop 字段名;
  
更新表名称:
rename table 旧表名 to 新表名;


修改表的结构
添加主键 : 
alter table student add primary key(字段,"多个","间隔");
 
移除主键 : 
alter table student drop primary key;

ps:如果主键为自增长,以上方式则不被允许执行,请先去掉主键自增长属性,然后再移除主键
alter table student modify id int not null,drop primary key


更新主键操作
添加外键: 
alter table 从表 add CONSTRAINT fk_test foreign key 从表(字段) REFERENCES 主表(字段);

移除外键: 
alter table 表 drop foreign key 外键名称;

ps:如果外键设置后想修改,那么只能是先删除,再添加


外键更新操作
修改默认值 : 
alter table 表 alter 字段 set default 100;
删除默认值 :
alter table 表 alter 字段 drop default;
默认值更新操作


五、删除表

删除表drop table 表名;

清空表truncate table 表名;


六、复制表

#只复制表结构和表中的数据create table db2 select * from tb1;

注意注意注意:主键/索引/触发器/外键  不会  被复制#只复制表结构create table tb2 like tb1;
注意注意注意:数据/触发器/外键/  不会被复制


七、数据类型

二进制类型:
   

bit[(M)]
       二进制位(101001),m表示二进制位的长度(1-64),默认m=1整数类型:
    tinyint[(m)] [unsigned] [zerofill]

        小整数,数据类型用于保存一些范围的整数数值范围:
        有符号:-128 ~ 127.
        无符号:255

        特别的: MySQL中无布尔值,使用tinyint(1)构造。    int[(m)][unsigned][zerofill]

        整数,数据类型用于保存一些范围的整数数值范围:
        有符号: -2147483648 ~ 2147483647
        无符号:4294967295

    bigint[(m)][unsigned][zerofill]
        大整数,数据类型用于保存一些范围的整数数值范围:
        有符号:-9223372036854775808 ~ 9223372036854775807
        无符号:18446744073709551615
        作用:存储年龄,等级,id,各种号码等

注意:为该类型指定宽度时,仅仅只是指定查询结果的显示宽度,与存储范围无关,所以我们使用默认的就可以了
    有符号和无符号的最大数字需要的显示宽度均为10,
    而针对有符号的最小值则需要11位才能显示完全,所以int类型默认的显示宽度为11是非常合理的


    
小数型:    decimal[(m[,d])] [unsigned] [zerofill]
        

准确的小数值,m是数字总个数(负号不算),d是小数点后个数。 m最大值为65,d最大值为30。

        特别的:对于精确数值计算时需要用此类型
        decaimal能够存储精确值的原因在于其内部按照字符串存储。

    FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]
        单精度浮点数(非准确小数值),m是数字总个数,d是小数点后个数。
        有符号:(-3.402823466E+38 to -1.175494351E-38),0,(1.175494351E-38 to 3.402823466E+38)
        无符号:0,(1.175 494 351 E-38,3.402 823 466 E+38)        **** 数值越大,越不准确 ****

    DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]
        双精度浮点数(非准确小数值),m是数字总个数,d是小数点后个数。

        有符号:(-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,
               (2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)
        无符号:0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)        
        **** 数值越大,越不准确 ****
        作用:存储薪资、身高、体重、体质参数等

字符型:    char (m)

char数据类型用于表示固定长度的字符串,可以包含最多达255个字符。其中m代表字符串的长度。
        
        PS: 即使数据小于m长度,也会占用m长度,但是在查询时,查出的结果会自动删除尾部的空格
        
        特点:定长,简单粗暴,浪费空间,存取速度快
            
    varchar(m)
        varchar 数据类型用于变长的字符串,可以包含最多达65535个字符(理论上可以,但是实际上在超出21845长度后,mysql会自动帮您转换数据类型为文本类型)。
        其中m代表该数据类型所允许保存的字符串的最大长度,只要长度小于该最大值的字符串都可以被保存在该数据类型中。

        PS: varchar类型存储数据的真实内容,例如:如果'ab  ',尾部的空格也会被存起来
        强调:varchar类型会在真实数据前加1-2Bytes的前缀,该前缀用来表示真实数据的bytes字节数(1-2Bytes最大表示65535个数字,正好符合mysql对row的最大字节限制,即已经足够使用)
        如果真实的数据<255bytes则需要1Bytes的前缀(1Bytes=8bit 2**8最大表示的数字为255)
        如果真实的数据>255bytes则需要2Bytes的前缀(2Bytes=16bit 2**16最大表示的数字为65535)
        特点:变长,精准,节省空间,存取速度慢
        
        sql优化:创建表时,定长的类型往前放,变长的往后放
                        比如性别          比如地址或描述信息
        PS:虽然varchar使用起来较为灵活,但是从整个系统的性能角度来说,char数据类型的处理速度更快,有时甚至可以超出varchar处理速度的50%。
            因此,用户在设计数据库时应当综合考虑各方面的因素,以求达到最佳的平衡            
        
    text
        text数据类型用于保存变长的大字符串,可以最多到65535 (2**16 − 1)个字符。

枚举类型(了解):      

enum
     
        An ENUM column can have a maximum of 65,535 distinct elements. (The practical limit is less than 3000.)
        
        示例:
            CREATE TABLE user (
             name VARCHAR(40),
             sex ENUM('男', '女', '未知')
            );
            INSERT INTO user (name, sex) VALUES ('人1','男'), ('人2','女'),
                                                ('人3','未知'),('人4','人妖');
            PS:人4会插入成功吗??        集合类型(了解):    set
    
        A SET column can have a maximum of 64 distinct members.
        示例:
        CREATE TABLE myset (col SET('a', 'b', 'c', 'd'));
        
        INSERT INTO myset (col) VALUES ('a,d'), ('d,a'), ('a,d,a'), ('a,d,d'), ('d,a,d');

日期/时间类型:

DATE     日期值
    
        YYYY-MM-DD(1000-01-01/9999-12-31)

    TIME  时间值或持续时间
        HH:MM:SS('-838:59:59'/'838:59:59')

    YEAR 年份值
        YYYY(1901/2155)

    DATETIME 混合日期和时间值

        YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59)

    TIMESTAMP 时间戳

        YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某时)
        
作用:存储用户注册时间,文章发布时间,员工入职时间,出生时间,过期时间等
数据类型

 

猜你喜欢

【MySql】where和having的异同?
文章目录面试常考:where与having有什么不同?一个实际查询需求wherehaving怎么正确的使用where和having?面试常考:where与having有什么不同?我们在进行查询的时候,经常需要按照条件对查询结果进行筛选,这就要用到条件语句where和having了。where是直接对表中的字段进行限定来筛选结果,having则需要跟分组关键字group by一起使用,通过对分组字段或分组计算函数进行限定来筛选结果。虽然它们都是对查询进行限定,却有着各自的特点和适用场景。很多时候,
发表于:2023-12-08 浏览:392 TAG:
【MySQL】MySQL主从同步实现
要实现MySQL的主从同步,可以按照以下步骤来进行操作:1 配置主服务器确保主服务器的MySQL配置文件my.cnf或my.ini中启动了二进制日志中brinary.log,即设置了log-bin参数为ON。为主数据库创建一个用于复制的用户,并授予复制权限。例如使用以下明命令:Create USER &#39;repl&#39;@&#39;slave_ip_address&#39; INENTIFIED BY &#39;password&#39;;Grant REPLACEACTION SLAV
发表于:2024-06-27 浏览:235 TAG:
【MySQL】MySQL索引原理与慢查询优化
浏览目录#&nbsp;一、索引介绍二、索引方法三、索引类型四、聚合索引和辅助索引五、测试索引六、正确使用索引七、组合索引八、注意事项九、查询计划十、慢日志查询十一、大数据量分页优化一、索引介绍#  一般的应用系统,读写的比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出现问题的,还是一些复杂的查询操作,因此对查询语句的优化显然是重中之重。什么是索引:简单来说,相当于图书的目录,可以帮助用户快速找到需要的内容。&nbsp;  在mysql中
发表于:2024-06-21 浏览:374 TAG:
【MySql】json字段内数据求和
首先,我们需要使用JSON_EXTRACT函数来解析JSON数据。假设我们的数据表名为data_table,JSON数据字段名为json_data,需要查询的字段为field_name。```sql SELECT&nbsp;JSON_EXTRACT(json_data,&nbsp;&#39;$.field_name&#39;)&nbsp;AS&nbsp;extracted_field FROM&nbsp;data_table;###&nbsp;步骤2:使用JSON函数提取数组内字段 如果字段是一
发表于:2024-09-18 浏览:210 TAG: #mysql
【MySQL】MySQL数据库CPU飙升到100%解决方案
1、定位cpu问题所在当cpu飙升到100%时,先用操作系统命令top命令观察是不是mysqld占用导致的,如果不是,找出占用高的进程,并进行相关处理。2、查看慢查询日志进入mysql命令行mysql&nbsp;-h主机地址&nbsp;-u用户名&nbsp;-p用户密码1查看慢查询SQL是否启用:ON是开启,OFF是关闭。 show variables like ‘log_slow_queries’;开启慢查询日志 set global log_slow_queries = on;3、使用sho
发表于:2024-07-17 浏览:247 TAG:
【MySql】mysql | mysql5.7升级8.0注意事项
一、说明&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1、应公司要求,mysql5.7安全漏洞较多,需要升级到8.0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2、记录注意事项备不时之需二、注意事项1、加密算法1)加密算法8.0改了,导致navicat无法连接2)解决:use&nbsp;mysql;ALTER&nbsp;USER&nbsp;&#39;root&#39;@&#39;%&#39;&amp;n
发表于:2023-12-15 浏览:371 TAG:
【MySql】表的创建与修改
文章目录表:怎么创建和修改数据表?添加字段修改字段1. 如何创建数据表?2. 都有哪些约束?3. 如何修改表?表:怎么创建和修改数据表?创建和修改数据表,是数据存储过程中的重要一环。我们不仅需要把表创建出来,还需要正确的设置限定条件,这样才能确保数据的一致性和完整性。同时,表中的数据会随着业务需求的变化而变化,添加和修改相应的字段也是常见的操作。在一个简单的超市项目中,客户经常需要进货,这就需要在MySQL数据库里面创建一个表,来管理进货的相关数据。假设这个表叫做进货单头表(importhead
发表于:2023-12-08 浏览:421 TAG:
【MySQL】MySql中的锁(表锁,行锁)
&nbsp; &nbsp; 锁是计算机协调多个进程或纯线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所在有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。&nbsp;概述&nbsp; &nbsp; 相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制。My
发表于:2024-06-16 浏览:233 TAG:
【MySQL】MySQL 之 视图、触发器、存储过程、函数、事物与数据库锁
一、视图#视图是一个虚拟表(非真实存在的),其本质是‘根据SQL语句获取动态的数据集,并为其命名‘ ,用户使用时只需使用“名称”即可获取结果集,可以将该结果集当做表来使用。使用视图我们可以把查询过程中的临时表摘出来,用视图去实现,这样以后再想操作该临时表的数据时就无需重写复杂的SQL了,直接去视图中查找即可,但视图有明显的效率问题,并且视图是存放在数据库中的,如果我们程序中使用的SQL过分依赖数据库中的视图,即强耦合,那就意味着扩展SQL极为不便,因此并不推荐使用视图有如下的特点:&nbsp;&amp;
发表于:2024-06-21 浏览:306 TAG:
【MySQL】一文带你了解数据库约束
文章目录1. 约束类型2.PRIMARY KEY:主键约束3.FOREIGN KEY:外键约束4.NOT NULL:非空约束5.UNIQUE:唯一约束5.DEFAULT:默认值约束6.总结1. 约束类型作用: 数据库约束是用于限制数据输入或数据更新的规则。数据库约束确保在表中只能插入符合规则的数据,以确保数据的完整性和一致性。 常见的数据库约束包括:主键约束:用于唯一标识表中的每一行数据,确保数据唯一性和完整性。外键约束:用于确保表之间数据的关系
发表于:2023-11-30 浏览:697 TAG: