日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQL 库、表语句

發(fā)布時間:2023/12/13 数据库 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL 库、表语句 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 一、數(shù)據(jù)庫操作
    • 1、創(chuàng)建數(shù)據(jù)庫
    • 2、刪除數(shù)據(jù)庫
  • 二、表操作
    • 1、創(chuàng)建表
      • (1)主鍵(primary key)屬性
      • (2)unique屬性
      • (3)主鍵和unique約束的區(qū)別
      • (4)外鍵
      • (5)auto_increment屬性
      • (6)列的注釋
      • (7)其他
    • 2、刪除表
    • 3、查看表結(jié)構(gòu)
    • 4、查看表創(chuàng)建語句
    • 5、修改表名稱
    • 6、修改多個表名稱
    • 7、增加列
    • 8、刪除列
    • 9、修改列
    • 10、修改列排列位置


一、數(shù)據(jù)庫操作

1、創(chuàng)建數(shù)據(jù)庫

create database IF NOT EXISTS db_javaagent_demo;

2、刪除數(shù)據(jù)庫

drop database IF EXISTS db_javaagent_demo;

二、表操作

1、創(chuàng)建表

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 '學(xué)生基本信息表';insert into tb_student values(10001, 'tom', '10001');

注:

  • char:定長的字符串;

  • varchar:變長的字符串;

  • comment:表的注釋信息;


(1)主鍵(primary key)屬性

如果主鍵是單列的話,可以直接在該列后面聲明primary key,如下將number設(shè)置為主鍵:

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 '學(xué)生基本信息表';

我們也可以把主鍵的聲明單獨提取出來,用下面形式聲明:

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 '學(xué)生基本信息表';

對于多個列的組合作為主鍵的話,就必須使用這種單獨聲明的形式:

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 '學(xué)生基本信息表';

注:主鍵列默認是有not null屬性的。


(2)unique屬性

unique 屬性表明列的值不允許重復(fù)。

如果我們想為單個列聲明 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 '學(xué)生基本信息表';

我們也可以把unique屬性聲明單獨提取出來,用下面形式聲明:

unique [約束名稱] (列名1, 列名2, ...) unique key [約束名稱] (列名1, 列名2, ...)

當(dāng)我們?yōu)槟硞€列添加了一個unique屬性后,我們插入的記錄的該列的值就不能重復(fù),所以為列添加了一個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 '學(xué)生基本信息表';

注:多個列組合具有unique屬性的情況,必須使用這種單獨聲明的形式。

如果表中為某個列或列組合定義了unique屬性的話,MySQL會對我們插入的記錄做校驗,如果新插入的記錄在該列或者列組合的值已經(jīng)在表中存在了,那就會報錯。

注:組合列定義unique屬性的話,只有組合列的值都相同才會報錯。


(3)主鍵和unique約束的區(qū)別

主鍵和unique約束都能保證某個列或者列組合的唯一性,但是:

  • 一張表中只能定義一個主鍵,卻可以定義多個unique約束;

  • 主鍵列不允許存放null,而聲明了unique屬性的列可以存放null,而且null可以重復(fù)的出現(xiàn)在多條記錄中;

注:一個表的某個列聲明了unique屬性,那這個列的值不就不可用重復(fù),那為啥null這么特殊呢?null其實并不是一個值,他代表不確定,我們平常說某個列的值為null,意味著這一列的值還未被設(shè)置。


(4)外鍵

插入到學(xué)生成績表 tb_student_score中的number(學(xué)號)列中的值必須能在學(xué)生基本信息表tb_student 表中 number 列中找到,否則如果一個學(xué)號只在成績表里出現(xiàn),而在基本信息表中找不到相應(yīng)記錄的話,就相當(dāng)于插入了不知道哪個學(xué)生的成績,這顯然是荒謬的。為了防止這樣的情況出現(xiàn),MySQL給我們提供了外鍵約束機制。

外鍵定義語法:

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

其中「外鍵名稱」也是可選的,一個名字而已,我們自己不命名的話,MySQL自己會幫我們命名。

如果A表中的某個列或者某些列依賴與B表中的某個列或某些列,那么就稱A表為子表,B表為父表。

子表和父表可以使用外鍵來關(guān)聯(lián)起來,上邊的例子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表插入數(shù)據(jù)時,MySQL都會為我們檢查一下插入的學(xué)號是否能在tb_student表中找到,如果找不到就會報錯。

注:父表中被子表依賴的列或者列組合必須建立索引,如果該列或者列組合已經(jīng)是主鍵或者有unique屬性,那么他們也就被默認建立了索引。


(5)auto_increment屬性

auto_increment翻譯成中文可以理解為 自動增長 ,簡稱自增。

如果一個表中的某個列的數(shù)據(jù)類型是整數(shù)類型或者浮點數(shù)類型,那么這個列可以設(shè)置auto_increment屬性,當(dāng)我們把某個列設(shè)置了auto_increment屬性之后,如果我們在插入新記錄的時候不指定該列的值,或者將該列的值顯式的指定為NULL或者0,那么新插入的記錄在該列上的值就是當(dāng)前該列的最大值+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 '學(xué)生基本信息表';

注:

  • 一個表中最多有一個具有auto_increment屬性的列;

  • 具有auto_increment屬性的列必須建立索引。主鍵或具有unique屬性的列會自動建立索引,具體什么是索引,后面會具體講解;

  • 一般擁有auto_increment屬性的列都是作為主鍵的屬性,來自動生成唯一標(biāo)識一條記錄的主鍵值;


(6)列的注釋

前面講過,在建表語句的末尾可以添加comment語句來給表添加注釋,其實我們可以在每一個列末尾添加comment語句來為列來添加注釋,例如:

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

(7)其他

每個列可以同時具有多個屬性,屬性聲明的順序無所謂,各個屬性之間用空白隔開就好。

注:有的屬性是沖突的,一個列不能具有兩個沖突的屬性,例如:

  • 一個列不能既聲明為primary key,又聲明為unique;

  • 一個列不能既聲明為default null,又聲明為not null;


2、刪除表

drop table if exists tb_student;

3、查看表結(jié)構(gòu)

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

4、查看表創(chuàng)建語句

# 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;

默認情況下列都是加到現(xiàn)有列的最后一行后面,增加列到特定位置:

# 添加到第一列 # 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 列名 新數(shù)據(jù)類型 [新屬性]; alter table tb_student modify nick_name varchar(20) not null;#alter table 表名 change 舊列名 新列名 新數(shù)據(jù)類型 [新屬性]; 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;

總結(jié)

以上是生活随笔為你收集整理的SQL 库、表语句的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。