一天學會MySql
1.安裝MySql(ubuntu 16.04)
-
安裝
sudo apt-get update #更新软件源 sudo apt-get install mysql-server #安装mysql
-
启动和关闭mysql服务器
service mysql start service mysql stop
-
確認是否安裝成功
sudo netstat -tap | grep mysql
mysql节点处于LISTEN状态表示启动成功
-
安裝可視化界面
sudo apt-get install mysql-workbench
2.mysql的基本操作
-
登錄數據庫
mysql -uroot -p123 //123是密碼,沒有設置可不寫
-
如何查看有什么数据库?
SHOW DATABASES;
-
如何选择数据库?
USE databasesname;
-
如何查看该数据库中有哪些表?
SHOW TABLES;
-
如何查询表中的数据?
SELECT * FROM tablename;
-
如何查询表中的某一條数据?
SELECT * FROM tablename WHRER 條件;
-
如何退出数据库服务器?
exit; 或者 ctrl+z
-
如何在数据库服务器中创建自己的数据库?
CREATE DATABASE databasesname;
-
如何创建一个数据表? 创建一个pet表
CREATE TABLE pet( name VARCHAR(20), owner VARCHAR(20), specise VARCHAR(20), sex CHAR(1), brith DATE, death DATE );
+---------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+-------------+------+-----+---------+-------+ | name | varchar(20) | YES | | NULL | | | owner | varchar(20) | YES | | NULL | | | specise | varchar(20) | YES | | NULL | | | sex | char(1) | YES | | NULL | | | birth | date | YES | | NULL | | +---------+-------------+------+-----+---------+-------+ 1.Field 字段 2.Type類型(int,var,varchar)
-
查看創建的數據表的結構
DESCRIBE pet;
-
如何插入数据?
INSERT INTO pet VALUES('kk','cc','dog','1','1998-8-2',null); +------+-------+---------+------+------------+ | name | owner | specise | sex | birth | +------+-------+---------+------+------------+ | kk | cc | dog | 1 | 1998-08-02 | +------+-------+---------+------+------------+
-
常用數據類型
在 MySQL 中,有三种主要的类型:Text(文本/字符串)、Number(数字)和 Date/Time(日期/时间)类型。
Text(文本/字符串)類型:
Number(数字)類型:
Date/Time(日期/时间)类型:
-
刪除數據
DELETE FROM tablesName WHRER 条件;
-
更改數據
UPDATE tableName SET 字段1=值1,字段2=值2 ... WHERE 条件;
稍微總結一下數據庫的常用操作: 增刪改查
增(INSERT)/刪(DELETE)/改(UPDATE)/查/(SELECT)
強調一點,數據庫的操作語句也可以使用小寫,這使用大寫,是爲了與後面的自命名區分。
3.mysql的建表約束
-
主鍵約束( PRIMARY KEY)
能够唯一确定一张表中的一条记录,增加主键约束之后,就可以使得字段不重复而且不为空
CREATE TABLE user(id INT PRIMARY KEY,name VARCHAR(20)) 运行DESCRIBE user1; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | name | varchar(20) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+
PRIMARY KEY表示設置id爲主鍵,通過id來區分不同記錄,插入同樣id或者空id的記錄,都會報錯。
-
聯合主鍵
CREATE TABLE user2( id INT, name VARCHAR(20), password VARCHAR(20), PRIMARY KEY(id,name) ); 运行DESCRIBE user2; +----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | name | varchar(20) | NO | PRI | NULL | | | password | varchar(20) | YES | | NULL | | +----------+-------------+------+-----+---------+-------+ INSERT INTO user2 VALUES (1,'老王','123456'); INSERT INTO user2 VALUES (2,'老王','123456'); +----+------+----------+ | id | name | password | +----+------+----------+ | 1 | 老王 | 123456 | | 2 | 老王 | 123456 | +----+------+----------+
复合主键只要字段不全相同,可以允许重復.同時,聯合主鍵都不允許爲空。
-
自增約束
CREATE TABLE user3( id INT PRIMARY KEY AUTO_INCREAMENT, name VARCHAR(20)); 运行DESCRIBE user3; +-------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(20) | YES | | NULL | | +-------+-------------+------+-----+---------+----------------+ INSERT INTO user3(name) VALUES('张三'); INSERT INTO user3(name) VALUES('李四'); +----+------+ | id | name | +----+------+ | 1 | 张三 | | 2 | 李四 | +----+------+ 無需定义id值 隨着插入的記錄數遞增。
-
建表之後增加主鍵約束
CREATE TABLE user4( id INT, name VARCHAR(20) ); 运行DESCRIBE user4; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | name | varchar(20) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 加入主键约束: ALTER TABLE user4 ADD PRIMARY KEY(id); 再次运行DESCRIBE user4; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | name | varchar(20) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 删除主键约束: ALERT TABLE user4 DROP PRIMARY KEY; 运行DESCRIBE user4查看表结构: +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | NO | | NULL | | | name | varchar(20) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 使用modify 修改字段.添加约束: ALTER TABLE user4 MODIFY id INT PRIMARY key; 使用DESCRIBE user4 查看表结构: +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | name | varchar(20) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 给主键设置自增长: ALTER TABLE user4 MODIFY id INT AUTO_INCREMENT; 运行 DESCRIBE user4 查看表结构: +-------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(20) | YES | | NULL | | +-------+-------------+------+-----+---------+----------------+
-
唯一主鍵約束
CREATE TABLE user5(id INT,name VARCHAR(20)); DESCRIBE user5; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | name | varchar(20) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ ALTER TABLE user5 ADD UNIQUE(name); DESCRIBE user5; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | name | varchar(20) | YES | UNI | NULL | | +-------+-------------+------+-----+---------+-------+ 還有其他幾種設置唯一主鍵的方法: 1.CREATE TABLE user5(id INT,name VARCHAR(20) UNIQUE); 2.CREATE TABLE user5(id INT,name VARCHAR(20), UNIQUE(name)); 3.一次行創建多個唯一約束CREATE TABLE user5(id INT,name VARCHAR(20), UNIQUE(id,name)); 此時id和name不都重復就行。 DESCRIBE user5; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | YES | MUL | NULL | | | name | varchar(20) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 4.ALTER TABLE user5 MODIFY name varchar(20) unique; 刪除唯一主鍵約束: ALTER TABLE user5 DROP INDEX name;
-
非空約束
修飾的字段不能爲空
CREATE TABLE user6 (id INT,NAME VARCHAR(20) NOT NULL); desc user6; 可以看到name不允許爲空。 +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | NAME | varchar(20) | NO | | NULL | | +-------+-------------+------+-----+---------+-------+ 下句沒有給name值,就會報錯。 INSERT INTO user6 (id) VALUES(1); INSERT INTO user6 (name) VALUES('zhangsan'); +------+----------+ | id | NAME | +------+----------+ | 1 | zhangsan | | NULL | zhangsan | +------+----------+ id可以爲NULL,而NAME不允許。 下面語句也可設置非空約束 ALTER TABLE user6 MODIFY id INT NOT NULL;
-
默認約束
如果沒有傳值,就會使用默認值
CREATE TABLE user7(id INT,name VARCHAR(20),age INT DEFAULT 10); 設置age的默認值爲10. DESC user7; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | name | varchar(20) | YES | | NULL | | | age | int(11) | YES | | 10 | | +-------+-------------+------+-----+---------+-------+ 插入:INSERT INTO user7 VALUES(1,'z'); SELECT * FROM user7; +------+------+------+ | id | name | age | +------+------+------+ | 1 | Z | 10 | +------+------+------+
-
外鍵約束
涉及到兩個表:主表和副表 父表 CREATE TABLE user8(id INT PRIMARY KEY, name VARCHAR(10)); DESC user8; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | name | varchar(10) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ INSERT INTO user8 VALUES (1,'一班'); +----+--------+ | id | name | +----+--------+ | 1 | 一班 | +----+--------+ 子表: CREATE TABLE user9(id INT PRIMARY KEY, name VARCHAR(10),class_id INT,FOREIGN KEY(class_id) REFERENCES user8(id)); +----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | name | varchar(10) | YES | | NULL | | | class_id | int(11) | YES | MUL | NULL | | +----------+-------------+------+-----+---------+-------+ 注意:1.子表的class_id引用父表的id,父表中id沒有的值,在子表中是不可以使用的 2.父表中的記錄被子表引用,父表是不能刪除的, 例如: DELETE user8 WHERE name = 'zhangsan'; 出现:Cannot delete or update a parent row:不能删除主表中的行
參考
1.https://blog.csdn.net/weixin_42209572/article/details/98983741