mysql 非空语法_mysql从入门到优化(1)基本操作上
這是數據庫系列的第一篇文章,主要是對mysql的基本操作有一個了解。本系列的教程會先從基礎出發,逐步過渡到優化。
一、前提
在這里我們不會從如何去安裝數據庫開始講起,而是在安裝完之后從操作數據庫開始,文中所有的代碼均在我自己的win10電腦上實現過一遍,確保無誤。而且本文是基于mysql5.7.23的版本中實現的。下面就直接開始。
注意,對于數據庫在學習的時候,過程都是從增查改刪用的順序來的。
二、操作數據庫
1、創建數據庫1語法:
2????CREATE?DATABASE?數據庫名?[IF?NOT?EXISTS];
3實例:
4????mysql>?create?database?test_db;
5????Query?OK,?1?row?affected?(0.02?sec)
6描述:
7????創建一個名為test_db的數據庫
2、查看數據庫1語法:
2????SHOW?DATABASES?[LIKE?"篩選條件"];
3實例:
4????mysql>?show?databases?like?"%test%";
5????+-------------------+
6????|?Database?(%test%)?|
7????+-------------------+
8????|?test??????????????|
9????|?test1?????????????|
10????|?test_db???????????|
11????+-------------------+
12????3?rows?in?set?(0.00?sec)
13描述:
14????顯示所有包含test的數據庫
3、修改數據庫
說實話一般,不修改數據庫,如果有問題直接刪除了重建。1語法:
2????ALTER?DATABASE?[數據庫名]?{[DEFAULT]?CHARACTER?SET?};
3實例:
4????mysql>?alter?database?test_db?default?character?set?gb2312;
5Query?OK,?1?row?affected?(0.00?sec)
6描述:
7????修改數據庫test_db的默認字符集為gb2312
4、刪除數據庫1語法:
2????DROP?DATABASE?[IF?EXISTS]?數據庫名;
3實例:
4????mysql>?drop?database?if?exists?test_db;
5????Query?OK,?0?rows?affected?(0.18?sec)
6描述:
7????如果數據庫test_db存在,那就刪除掉
5、使用數據庫1語法:
2????USE?數據庫名;
3實例:
4????mysql>?use?test1;
5????Database?changed
6描述:
7????進入到當前數據庫
三、操作表
1、創建表1語法:
2????CREATE?TABLE?表名?(字段名?字段類型,?字段名?字段類型.....);
3實例:
4????mysql>?use?test_db;
5????Database?changed
6????mysql>?create?table?student(
7????->?id?int(11),
8????->?name?varchar(20),
9????->?class_id?int(11),
10????->?score?float
11????->?);
12????Query?OK,?0?rows?affected?(0.30?sec)
13描述:
14????首先進入當前數據庫test_db,然后創建一個student表
2、查看表1語法:
2????SHOW?TABLES?[LIKE?'篩選條件'];
3實例:
4????mysql>?show?tables;
5????+-------------------+
6????|?Tables_in_test_db?|
7????+-------------------+
8????|?student???????????|
9????+-------------------+
10????1?row?in?set?(0.01?sec)
11描述:
12????顯示當前數據庫素所有的表
3、查看表結構1語法:
2????DESCRIBE?表名;
3實例:
4????mysql>?describe?student;
5????+----------+-------------+------+-----+---------+-------+
6????|?Field????|?Type????????|?Null?|?Key?|?Default?|?Extra?|
7????+----------+-------------+------+-----+---------+-------+
8????|?id???????|?int(11)?????|?YES??|?????|?NULL????|???????|
9????|?name?????|?varchar(20)?|?YES??|?????|?NULL????|???????|
10????|?class_id?|?int(11)?????|?YES??|?????|?NULL????|???????|
11????|?score????|?float???????|?YES??|?????|?NULL????|???????|
12????+----------+-------------+------+-----+---------+-------+
13????4?rows?in?set?(0.01?sec)
14描述:
15????查看student數據表的結構
4、修改表
(1)添加字段1語法:
2????ALTER?TABLE?表名?ADD?字段名稱?字段類型;
3實例:
4????mysql>?alter?table?student?add?age?int(11);
5????Query?OK,?0?rows?affected?(0.42?sec)
6????Records:?0??Duplicates:?0??Warnings:?0
7描述:
8????修改數據表student,新增了一個age字段
(2)修改字段類型1語法:
2????ALTER?TABLE?表名?MODIFY?字段名?字段類型;
3實例:
4????mysql>?alter?table?student?modify?age?varchar(20);
5????Query?OK,?0?rows?affected?(0.31?sec)
6????Records:?0??Duplicates:?0??Warnings:?0
7描述:
8????修改數據表student,將字段age的類型改為varchar
(3)修改字段名稱1語法:
2????ALTER?TABLE?表名?CHANGE?舊字段名?新字段名?新字段類型;
3實例:
4????mysql>?alter?table?student?change?score?grade?int(11);
5????Query?OK,?0?rows?affected?(0.37?sec)
6????Records:?0??Duplicates:?0??Warnings:?0
7描述:
8????修改數據表student,將score字段改為grade,并設置新的字段類型
(4)刪除字段1語法:
2????ALTER?TABLE?表名?DROP?字段名;
3實例:
4????mysql>?alter?table?student?drop?age;
5????Query?OK,?0?rows?affected?(0.25?sec)
6????Records:?0??Duplicates:?0??Warnings:?0
7描述:
8????修改數據表student,刪除age字段
(5)修改表名1語法:
2????ALTER?TABLE?舊表名?RENAME?新表名;
3實例:
4????mysql>?alter?table?student?rename?stu;
5????Query?OK,?0?rows?affected?(0.05?sec)
6描述:
7????修改數據表student,重新命名為stu
5、刪除表1語法:
2????DROP?TABLE?[IF?EXISTS]?表名;
3實例:
4????mysql>?drop?table?if?exists?student;
5????Query?OK,?0?rows?affected?(0.05?sec)
6描述:
7????如果表student存在,那就刪除掉
四、約束
約束的作用,主要是為了確保數據的一致性和完整性。一般在創建表的時候指定。
1、主鍵約束
(1)主鍵約束1語法:
2????字段名稱?字段類型?PRIMARY?KEY;
3實例:
4????mysql>?create?table?teacher(
5????->?id?int(11)?primary?key,
6????->?name?varchar(20),
7????->?classId?int(11),
8????->?socre?float
9????->?);
10????Query?OK,?0?rows?affected?(0.15?sec)
11描述:
12????在創建表的同時,設置id為主鍵
或者是這種新式1????mysql>?create?table?teacher(
2????->?id?int(11)?,
3????->?name?varchar(20),
4????->?classId?int(11),
5????->?socre?float,
6????->?primary?key(id)
7????->?);
8????Query?OK,?0?rows?affected?(0.15?sec)
(2)復合主鍵約束1語法:
2????PRIMARY?KEY?[字段1,?字段2......]
3實例:
4????mysql>?create?table?teacher(
5????->?id?int(11)?,
6????->?name?varchar(20),
7????->?classId?int(11),
8????->?socre?float,
9????->?primary?key(id,classId)
10????->?);
11????Query?OK,?0?rows?affected?(0.12?sec)
12描述:
13????為表teacher設置多個主鍵
(3)修改表添加主鍵約束1語法:
2????ALTER?TABLE?表名?ADD?PRIMARY?KEY?(字段名);
3實例:
4????mysql>?alter?table?stu?add?primary?key(id);
5????Query?OK,?0?rows?affected?(0.25?sec)
6????Records:?0??Duplicates:?0??Warnings:?0
7描述:
8????修改表stu,新增一個主鍵id
2、外鍵約束
外鍵用于連接兩張表,
(1)創建表時添加外鍵約束1語法:
2????FOREIGN?KEY?字段1?字段2.....?REFERENCES?主表?字段1?字段2......
3實例:
4????mysql>?create?table?class(
5????->?id?int(11)?primary?key,
6????->?name?varchar(25)
7????->?);
8????Query?OK,?0?rows?affected?(0.16?sec)
9
10????mysql>?create?table?stu(
11????->?id?int(11),
12????->?name?varchar(25),
13????->?class_id?int(11),
14????->?score?float,
15????->?foreign?key(class_id)?references?class(id)
16????->?);
17????Query?OK,?0?rows?affected?(0.18?sec)
18描述:
19????首先創建一個class表,然后再創建stu表的時候,設置class_id為外鍵,指向class表
(2)修改表時添加外鍵約束1語法:
2????ALTER?TABLE?表名?ADD?FOREIGN?KEY?外鍵字段名?REFERENCES?主表名?主表字段;
3實例:
4????mysql>?alter?table?stu
5????->?add?foreign?key(class_id)
6????->?references?class(id);
7????Query?OK,?0?rows?affected?(0.47?sec)
8????Records:?0??Duplicates:?0??Warnings:?0
9描述:
10????修改表stu,增加一個外鍵
(3)刪除外鍵約束1語法:
2????ALTER?TABLE?表名?DROP?FOREIGN?KEY?外鍵字段名
3實例:
4????mysql>?alter?table?stu
5????->?add?constraint?fk_class_id?foreign?key(class_id)
6????->?references?class(id);
7????Query?OK,?0?rows?affected?(0.39?sec)
8????Records:?0??Duplicates:?0??Warnings:?0
9
10????mysql>?alter?table?stu?drop?foreign?key?fk_class_id;
11????Query?OK,?0?rows?affected?(0.05?sec)
12????Records:?0??Duplicates:?0??Warnings:?0
13描述:
14????新增加一個外鍵,然后刪除,注意我們為外鍵起了個名字fk_class_id
3、唯一約束1語法:
2????字段名?字段類型?UNIQUE;
3實例:
4????mysql>?create?table?stu2(
5????->?id?int(11),
6????->?name?varchar(25)?unique,
7????->?primary?key(id)
8????->?);
9????Query?OK,?0?rows?affected?(0.16?sec)
4、默認約束1語法:
2????字段名?字段類型?DEFAULT?默認值;
3實例:
4????mysql>?create?table?stu3(
5????->?id?int(11)?primary?key,
6????->?name?varchar(25)?unique,
7????->?sex?varchar(10)?default?"women"
8????->?);
9????Query?OK,?0?rows?affected?(0.18?sec)
5、非空約束1語法:
2????字段名?字段類型?NOT?NULL;
3實例:
4????mysql>?create?table?stu4(
5????->?id?int(11)?primary?key,
6????->?name?varchar(25)?unique,
7????->?sex?varchar(10)?default?"women",
8????->?class_id?int(11)?not?null
9????->?);
10????Query?OK,?0?rows?affected?(0.19?sec)
五、函數
1、數值型函數1ABS(X):返回X的絕對值
2MOD(X,Y):返回X被Y除后的余數
3SQRT(X):返回非負數X的二次方根
4SIGN(X):返回X的符號,為正返回1,為負返回-1
5CEIL(X):返回不小于X的最小整數
6SIN(X):返回X的sin值,其他三角函數類似
2、字符串函數1LENGTH(str):返回str的字節長度
2UPPER(str):將str中的每一個字母全部轉化為大寫
3LOWER(str):將str中的每一個字母全部轉化為小寫
4LEFT(str,n):返回str中最左邊的n個字符
5RIGHT(str,n):返回str中最右邊的n個字符
6CONCAT(S1,S2,S3.....):將內部多個字符串拼接
7TRIM(str):刪除str兩邊的空格
8SUNSREING(str,n,len):從位置n開始,返回str的長度為len的字串
9REVERSE(str):將字符串str反轉
10REPLACE(s,s1,s2):使用s2,替換掉s中的所有s1字串
3、日期函數1NOW()=SYSDATE():返回當前的系統時間,格式為“2020-10-03?19:35:25”
2CURDATE()=CURRENT_DATE():返回日期,格式為“2020-10-03”
3CURTIME()=CURRENT_TIME():返回系統時間,格式為“19:37:28”
4DAYOFWEEK()=WEEKDAY():返回當天在一周中的索引,weekday("2020-10-03")
5DAYOFMONTH(d)=DAYOFYEAR(d):返回d是一個月的第幾天
6MONTH(data)=MONTHNAME(data):返回data對應的月份
7DATEDIFF(date1,date2):返回date1和date2之間的天數
4、聚合函數1MAX():返回指定列中的最大值
2MIN():返回查詢列中的最小值
3COUNT(字段名):統計含有字段名的總行數
4SUM():返回指定列的總和值
5AVG():返回指定列的平均值
5、自定義函數
(1)無參數1語法:
2????CREATE?FUNCTION?函數名()?RETURNS?字段類型
3????RETURN?操作;
4實例:
5????mysql>?create?function?f1()?returns?varchar(30)
6????->?return?now();
7????Query?OK,?0?rows?affected?(0.03?sec)
8調用:
9????mysql>?select?f1();
10????+---------------------+
11????|?f1()????????????????|
12????+---------------------+
13????|?2020-11-05?15:52:24?|
14????+---------------------+
15????1?row?in?set?(0.03?sec)
(2)有參數1語法:
2????CREATE?FUNCTION?函數名(參數名?參數類型,參數名?參數類型.....)
3????RETURNS?返回類型
4????RETURN?函數操作
5實例:
6????mysql>?create?FUNCTION?f2(num1?smallint?unsigned,num2?smallint?unsigned)
7????->?returns?float(10,2)
8????->?return?(num1+num2)/2;
9????Query?OK,?0?rows?affected?(0.00?sec)
10調用:
11????mysql>?select?f2(10,20);
12????+-----------+
13????|?f2(10,20)?|
14????+-----------+
15????|?????15.00?|
16????+-----------+
17????1?row?in?set?(0.01?sec)
OK,寫到這算是把基礎知識的上半部分寫完了,下一部分主要寫對數據表的增刪改查操作,因為這個查詢操作實在是過于麻煩,因此單開了一篇文章來描述,以上內容適合學過mysql基礎的人,進行一個鞏固或者是回顧,屬于最最基本的知識點范疇了。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的mysql 非空语法_mysql从入门到优化(1)基本操作上的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql许多连接错误而被阻止_怎样解决
- 下一篇: mysql 1054 42s22_MyS