SQL 库、表语句

文章目录

  • 一、数据库操作
    • 1、创建数据库
    • 2、删除数据库
  • 二、表操作
    • 1、创建表
      • (1)主键(primary key)属性
      • (2)unique属性
      • (3)主键和unique约束的区别
      • (4)外键
      • (5)auto_increment属性
      • (6)列的注释
      • (7)其他
    • 2、删除表
    • 3、查看表结构
    • 4、查看表创建语句
    • 5、修改表名称
    • 6、修改多个表名称
    • 7、增加列
    • 8、删除列
    • 9、修改列
    • 10、修改列排列位置


一、数据库操作

1、创建数据库

create database IF NOT EXISTS db_javaagent_demo;

2、删除数据库

drop database IF EXISTS db_javaagent_demo;

二、表操作

1、创建表

create table if not exists tb_student(id int(4) primary key not null auto_increment,number int,name varchar(20),sex char(2),id_number char(18),department varchar(30),major varchar(30),enrollment_time date
) COMMENT '学生基本信息表';insert into tb_student values(10001, 'tom', '10001');

注:

  • char:定长的字符串;

  • varchar:变长的字符串;

  • comment:表的注释信息;


(1)主键(primary key)属性

如果主键是单列的话,可以直接在该列后面声明primary key,如下将number设置为主键:

create table if not exists tb_student(number int primary key,name varchar(20),sex char(2),id_number char(18),department varchar(30),major varchar(30),enrollment_time date
) COMMENT '学生基本信息表';

我们也可以把主键的声明单独提取出来,用下面形式声明:

create table if not exists tb_student(number int,name varchar(20),sex char(2),id_number char(18),department varchar(30),major varchar(30),enrollment_time date,primary key (number)
) COMMENT '学生基本信息表';

对于多个列的组合作为主键的话,就必须使用这种单独声明的形式:

create table if not exists tb_student(number int,name varchar(20),sex char(2),id_number char(18),department varchar(30),major varchar(30),enrollment_time date,primary key (number, id_number)
) COMMENT '学生基本信息表';

注:主键列默认是有not null属性的。


(2)unique属性

unique 属性表明列的值不允许重复。

如果我们想为单个列声明 unique 属性,可以直接在该列后填写 unique 或者 unique key,例如将 tb_student 表中的 id_number 列声明为 unique 属性:

create table if not exists tb_student(number int,name varchar(20),sex char(2),id_number char(18) unique,department varchar(30),major varchar(30),enrollment_time date,primary key (number)
) COMMENT '学生基本信息表';

我们也可以把unique属性声明单独提取出来,用下面形式声明:

unique [约束名称] (列名1, 列名2, ...)
unique key [约束名称] (列名1, 列名2, ...)

当我们为某个列添加了一个unique属性后,我们插入的记录的该列的值就不能重复,所以为列添加了一个unique属性也可以认为是为这个表添加了一个约束,我们就称之为unique约束。

每个约束都可以有一个名字,像主键也算是一个约束,他的名字就是默认的primary,不过一个表中可以为不同的列添加多个unique属性,也就是添加多个unique约束,每添加一个unique约束,我们就可以给他起个名,这就是上边的 「约束名称」 的含义。

不过「约束名称」是被中括号[]扩起来的,意味着我们写不写都可以,如果不写的话,MySQL会自己帮我们起名。

例如:

create table if not exists tb_student(number int,name varchar(20),sex char(2),id_number char(18),department varchar(30),major varchar(30),enrollment_time date,unique key uk_id_number (id_number, number)
) COMMENT '学生基本信息表';

注:多个列组合具有unique属性的情况,必须使用这种单独声明的形式。

如果表中为某个列或列组合定义了unique属性的话,MySQL会对我们插入的记录做校验,如果新插入的记录在该列或者列组合的值已经在表中存在了,那就会报错。

注:组合列定义unique属性的话,只有组合列的值都相同才会报错。


(3)主键和unique约束的区别

主键和unique约束都能保证某个列或者列组合的唯一性,但是:

  • 一张表中只能定义一个主键,却可以定义多个unique约束;

  • 主键列不允许存放null,而声明了unique属性的列可以存放null,而且null可以重复的出现在多条记录中;

注:一个表的某个列声明了unique属性,那这个列的值不就不可用重复,那为啥null这么特殊呢?null其实并不是一个值,他代表不确定,我们平常说某个列的值为null,意味着这一列的值还未被设置。


(4)外键

插入到学生成绩表 tb_student_score中的number(学号)列中的值必须能在学生基本信息表tb_student 表中 number 列中找到,否则如果一个学号只在成绩表里出现,而在基本信息表中找不到相应记录的话,就相当于插入了不知道哪个学生的成绩,这显然是荒谬的。为了防止这样的情况出现,MySQL给我们提供了外键约束机制。

外键定义语法:

constraint [外键名称] foreign key(1,2, ...) references 父表名(父列1, 父列2, ...);

其中「外键名称」也是可选的,一个名字而已,我们自己不命名的话,MySQL自己会帮我们命名。

如果A表中的某个列或者某些列依赖与B表中的某个列或某些列,那么就称A表为子表,B表为父表。

子表和父表可以使用外键来关联起来,上边的例子tb_student_score表的number列依赖于tb_student的number列,所以tb_student就是一个父表,tb_student_score就是子表。

我们在tb_student_score建表语句中定义一个外键:

create table tb_student_score (number int,subject varchar(30),score tinyint,primary key (number, subject),constraint foreign key(number) references tb_student(number)
);

这样,在对tb_student_score表插入数据时,MySQL都会为我们检查一下插入的学号是否能在tb_student表中找到,如果找不到就会报错。

注:父表中被子表依赖的列或者列组合必须建立索引,如果该列或者列组合已经是主键或者有unique属性,那么他们也就被默认建立了索引。


(5)auto_increment属性

auto_increment翻译成中文可以理解为 自动增长 ,简称自增。

如果一个表中的某个列的数据类型是整数类型或者浮点数类型,那么这个列可以设置auto_increment属性,当我们把某个列设置了auto_increment属性之后,如果我们在插入新记录的时候不指定该列的值,或者将该列的值显式的指定为NULL或者0,那么新插入的记录在该列上的值就是当前该列的最大值+1后的值。

# 列名 列的类型 auto_increment
create table if not exists tb_student(id int auto_increment primary key,number int,name varchar(20),sex char(2),id_number char(18),department varchar(30),major varchar(30),enrollment_time date,unique key uk_id_number (id_number, number)
) COMMENT '学生基本信息表';

注:

  • 一个表中最多有一个具有auto_increment属性的列;

  • 具有auto_increment属性的列必须建立索引。主键或具有unique属性的列会自动建立索引,具体什么是索引,后面会具体讲解;

  • 一般拥有auto_increment属性的列都是作为主键的属性,来自动生成唯一标识一条记录的主键值;


(6)列的注释

前面讲过,在建表语句的末尾可以添加comment语句来给表添加注释,其实我们可以在每一个列末尾添加comment语句来为列来添加注释,例如:

create table if not exists tb_student(id int auto_increment primary key,number int comment '学号',name varchar(20) comment '姓名',sex char(2) comment '性别',id_number char(18) comment '身份证号',unique key uk_id_number (id_number, number)
) COMMENT '学生基本信息表';

(7)其他

每个列可以同时具有多个属性,属性声明的顺序无所谓,各个属性之间用空白隔开就好。

注:有的属性是冲突的,一个列不能具有两个冲突的属性,例如:

  • 一个列不能既声明为primary key,又声明为unique;

  • 一个列不能既声明为default null,又声明为not null;


2、删除表

drop table if exists tb_student;

3、查看表结构

describe tb_student;
desc tb_student;
explain tb_student;
show columns from tb_student;
show fields from tb_student;

4、查看表创建语句

# show create table 表名;
show create table tb_student;

5、修改表名称

# alter table 旧表名 rename to 新表名;
alter table tb_student rename to tb_student_1;

6、修改多个表名称

# rename table 旧表名1 to 新表名, 旧表名2 to 新表名2, ...;
rename table tb_student to tb_student_1, tb_user to tb_user_1;

7、增加列

# alter table 表名 add column 列名 列的类型 [列的属性];
alter table tb_student add column nickname varchar(20) not null;

默认情况下列都是加到现有列的最后一行后面,增加列到特定位置:

# 添加到第一列
# alter table 表名 add column 列名 列的类型 [列的属性] first;
alter table tb_student add column nickname varchar(20) not null first;

8、删除列

# alter table 表名 drop column 列名;
alter table tb_student drop column nick_name;

9、修改列

# alter table 表名 modify 列名 新数据类型 [新属性];
alter table tb_student modify nick_name varchar(20) not null;#alter table 表名 change 旧列名 新列名 新数据类型 [新属性];
alter table tb_student change nick_name nick_name_1 varchar(20) not null;

10、修改列排列位置

# alter table 表名 modify 列名 列的类型 列的属性 first;
alter table tb_student modify nick_name varchar(20) not null first;# alter table 表名 modify 列名 列的类型 列的属性 after 指定列名;
alter table tb_student modify nick_name varchar(20) not null after name;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/446701.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

codeforces 69A-C语言解题报告

69A题目网址 题目解析 1.输入n个(x,y,z),当xi相加0;yi相加0;zi相加0同时时输出YES,否则输出NO 举例: 输入: 3 3 -1 7 -5 2 -4 2 -1 -3 输出: YES 2.注意点:使用二维数组去存放时,使用遍历行并对每一列分别相加 for(b0;b<n;b){count_xdir[b][0];count_ydir[b][1];count_z…

C++primer第十章 泛型算法 10.3 定制操作

10.3定制操作 很多算法都会比较输入序列中的元素。默认情况下&#xff0c;这类算法使用元素类型的&#xff1c;或运算符完成比较。标准库还为这些算法定义了额外的版本&#xff0c;允许我们提供自己定义的操作来代替默认运算符。例如&#xff0c;sort算法默认使用元素类型的&l…

SQL 查询语句

文章目录1、简单查询2、去除单列的重复结果查询3、去除多列的重复结果查询4、限制查询结果条数5、对查询结果排序&#xff08;1&#xff09;按照单个列的值进行排序&#xff08;2&#xff09;按照多个列的值进行排序6、带搜索条件查询&#xff08;1&#xff09;简单搜索条件查询…

2000年考研英语阅读理解文章一

文章详细讲解网址 注意点 1.文章开篇第一句话往往是文章所想要通过后面讲解的事情表达出来的最终观点 2.当询问到作者观点时,往往在最后一段,一般以下形式呈现: 1)few people …(这就是作者的观点) 2)I think 后面举什么别人所说的话,如果不是表达了赞同,则都是别人的观点,而…

C++primer第十章 泛型算法 10.4 再探迭代器 10.5 泛型算法结构

除了为每个容器定义的迭代器之外&#xff0c;标准库在头文件iterator中还定义了额外几种迭代器。这些迭代器包括以下几种。插入迭代器(insert iterator)&#xff1a;这些迭代器被绑定到一个容器上&#xff0c;可用来向容器插入元素。流迭代器(stream iterator)&#xff1a;这些…

codeforces 546A-C语言解题报告

546A题目网址 题目解析 1.输入 k(成本),n(拥有的钱),w(要买的个数),输出还需要向朋友借多少钱? 举例: 输入: 3 17 4 输出: 13 2.注意: 1)第i个,需要i*k个价钱,所以需要使用for循环运算花费 2)当拥有的钱足够买时,不需要借钱,输出为0 代码 #include<stdio.h> #inclu…

java.sql.SQLException: ORA-00604: 递归 SQL 级别 1 出现错误

文章目录1、报错信息2、原因分析3、解决方案1、报错信息 java.sql.SQLException: ORA-00604: 递归 SQL 级别 1 出现错误 ORA-01000: 超出打开游标的最大数 ORA-00604: 递归 SQL 级别 1 出现错误 ORA-01000: 超出打开游标的最大数 ORA-01000: 超出打开游标的最大数at oracle.jd…

C++primer第十一章 关联容器 11.1使用关联容器 11.2 关联容器概述

关联容器和顺序容器有着根本的不同&#xff1a;关联容器中的元素是按关键字来保存和访问的。与之相对&#xff0c;顺序容器中的元素是按它们在容器中的位置来顺序保存和访问的。虽然关联容器的很多行为与顺序容器相同&#xff0c;但其不同之处反映了关键字的作用关联容器支持高…

codeforces 791A-C语言解题报告

791A题目网址 题目解析 1.输入a,b,每一年a3;b2,问多少年a>b? 2.因为不知道需要循环多少次,使用while循环 代码 #include<stdio.h> #include<stdlib.h> #include<string.h> int main() {int a,b,i0;scanf("%d %d",&a,&b);while(a&l…

Redis Mac下安装与使用

目录一、下载安装包二、编译三、服务端与客户端命令1、服务端启动命令2、客户端连接命令3、服务端关闭命令一、下载安装包 官网地址&#xff1a;http://redis.io/download 下载后&#xff0c;解压放到任意目录下。 二、编译 打开终端&#xff0c;切换到 Redis 根目录&#x…

C++primer第十一章 关联容器 11.3关联容器操作 11.4 无序容器

11.3关联容器操作 除了表9.2(第295页)中列出的类型&#xff0c;关联容器还定义了表11.3中列出的类型。这些类型表示容器关键字和值的类型。对于set类型&#xff0c;key_type和value type是一样的&#xff1b;set中保存的值就是关键字。在一个map中&#xff0c;元素是关键字_值…

codeforces 977A-C语言解题报告

977A题目网址 题目解析 1,输入数字n,运算次数k,当n最后一个数字是0时,n/10;当n最后一个数字不是0时,n-1;输出n 举例: 输入: 512 4 输出: 50 2.注意:当n最后一个数字是0时,使用n%100去判断 代码 #include<stdio.h> #include<stdlib.h> #include<string.h>…

SpringBoot 整合Dubbo

文章目录一、工程目录结构二、创建工程项目1、创建接口工程&#xff08;cw-dubbo-api&#xff09;&#xff08;1&#xff09;pom.xml&#xff08;2&#xff09;创建接口类&#xff08;LoginService&#xff09;2、创建服务提供者工程&#xff08;cw-dubbo-provider&#xff09;…

macos实现输入文件输入结束符

在clion软件中&#xff0c;执行cin>>value ,如何手动输入结束符号&#xff1f;&#xff1f;需要在debug环境下&#xff0c;然后&#xff0c;使用command D 实现此功能

2000年考研英语阅读理解文章二

文章详细解析 注意点 1.文章标题选择,查看文章中一直在重复提及的话语: 如:我们没有进化了—>标题:人类进化无路可走 知识点 ----单词 1.offspring n孩子,后代 2.Utopia n乌托邦,空想的完美境界 3.wholly adv完全地 4.comprehension n理解力 5.descendant n后代 6.mate …

Kafka Mac下安装与使用

文章目录一、下载安装二、启动Zookeeper三、启动Kafka四、创建Topic五、查看Topic六、删除Topic七、生产/消费数据八、查看消费组九、查看消费组详情一、下载安装 到 Kafka 官网下载&#xff1a;https://kafka.apache.org/downloads 下载好 tar包 后&#xff0c;执行下面命令…

C++primer第一章 开始

运算符打印endl,这是一个被称为操纵符(manipulator)的特殊值。写入endl 的效果是结束当前行&#xff0c;并将与设备关联的缓冲区(buffer)中的内容刷到设备中。缓冲刷新操作可以保证到目前为止程序所产生的所有输出都真正写入输出流中&#xff0c;而不是仅停留在内存中等待写入流…

codeforces 617A-C语言解题报告

617A题目网址 题目解析 1.输入x,能够通过1,2,3,4,5去到达x,求最小到达x的步数. 举例: 输入: 12 输出: 3 2.注意点: 要最小的步数,所以直接使用最大的5去比较判断 1)当x<5时,只需要1 2)当x>5时,如果x%50(x能整除5),只需要x/5步数,不能整除则需要x/51步数 代码 #inclu…

SpringBoot —— Bean的注入方式

文章目录1、组件注解2、Component Bean3、Import(PlaceHolderClass)快速导入一个组件4、使用Spring提供的FactoryBean注入1、组件注解 注解描述Component组件定义不清晰时候的注解Controller控制器层Service服务层Repository数据层 注&#xff1a;添加注解的类需要与启动类在…

如何保养电池

1&#xff0c;不要在低于0度和高于35度的范围下使用电池&#xff0c;尤其是高温环境下对电脑充电&#xff0c;对电池的破坏是不可逆转的。2&#xff0c;放电过于彻底或者充电过于饱和&#xff0c;也会对电池的容量造成损耗。BMS 调整电池的充放电3&#xff0c;电脑长期不用&…