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.pswp.cn/news/446701.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/446701.shtml
英文地址,請注明出處:http://en.pswp.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;電腦長期不用&…