MariaDB數據類型能夠分爲數字,日期和時間以及字符串值。mysql
使用數據類型的原則:夠用就行,儘可能使用範圍小的,而不用大的。linux
整數:int,bit(位,0和1);bit(1)有兩種可能,0或1,bit(2)有四種可能,00、0一、十、11。面試
小數:decimal; #decimal(5,2)sql
字符串:varchar,char 數據庫
日期時間:date,time,datetimespa
枚舉類型(enum),好比gender類型有男、女等。code
1)主鍵primary key:物理上存儲的順序,有索引功能,不爲空,不能重複,按序排序;orm
2)非空not null:此字段不能爲空;blog
3)惟一unique:此字段不容許重複;排序
4)默認default:當不填寫此值時會使用默認值,若是填寫則已填寫爲準;
5)外鍵foreign key:對關係字段進行約束,當爲關係字段填寫值時,會到關聯的表中查詢此值是否存在,若是存在則填寫成功,若是不存在則填寫失敗並拋出異常。外鍵設置原則:誰的範圍小給誰設置外鍵。
數值類型 |
類型 |
字節大小 |
有符號範圍(Signed) |
無符號範圍(Unsigned) |
TINYINT |
1 |
-128~127 |
0~256 |
|
SMALINT |
2 |
-32768~32767 |
0~65535 |
|
MEDIUINT |
3 |
-8388608~8388607 |
0~16777215 |
|
INT/INTEGER |
4 |
|
|
|
BIGINT |
8 |
|
|
|
字符串 |
類型 |
字節大小 |
示例 |
|
CHAR |
0~255 |
CHAR(20)無論寫多少,佔用均爲20字符 |
||
VARCHAR |
0~255 |
可伸縮,VARCHAR(22)最多22個字符,寫多少佔用多少,查詢效率比CHAR差 |
||
TEXT |
0~65535 |
|
||
日期時間類型 |
類型 |
字節大小 |
示例 |
|
DATE |
4 |
只有年月日,2019-5-15 |
||
TIME |
3 |
只有時分秒,14:56:36 |
||
DATETIME |
8 |
年月日時分秒 |
||
YEAR |
1 |
年 2019 |
||
TIMESTAP |
4 |
帶有時區的詳細信息,如‘2019-5-15 14:56:36’UTC |
進入數據庫
[root@localhost ~]# mysql -uroot -p123
1> 查看
查看數據庫
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| testbase |
+--------------------+
建立數據庫testdb用做實驗
MariaDB [(none)]> create database testdb character set utf8; #支持中文 MariaDB [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | testdb | +--------------------+
使用數據庫testdb
MariaDB [(none)]> use testdb; MariaDB [testdb]> show tables; #查看錶 Empty set (0.000 sec) #空表
建立一個classes表,有ip、name兩個字段(列),ip爲無符號的整型數,設置有主鍵,name爲VARCHAR類型的字符串
MariaDB [testdb]> create table classes (id tinyint unsigned primary key,name varchar(20)); Query OK, 0 rows affected (0.005 sec) MariaDB [testdb]> show tables; +-------------------+ | Tables_in_testdb | +-------------------+ | classes | +-------------------+
查看錶的字段
MariaDB [testdb]> desc classes; #describe,描述 +-------+---------------------+------+-----+---------+------+ | Field | Type | Null | Key | Default | Extra| +-------+---------------------+------+-----+---------+------+ | id | tinyint(3) unsigned | NO | PRI | NULL | | | name | varchar(20) | YES | | NULL | | +-------+---------------------+------+-----+---------+------+ #定義 類型 是否爲空 是否主鍵 默認值 擴展
linux當中的註釋用#,而數據庫中的註釋用--
建立一個複雜的students表,包含字段id、name、age、high、gender、cls_id
MariaDB [testdb]> create table students (id tinyint unsigned primary key auto_increment, -> name varchar(20), -> age tinyint unsigned, -> gender enum('男', '女', '人妖','保密')not null default '人妖', #枚舉,默認爲‘人妖’ -> cls_id tinyint unsigned -> ); MariaDB [testdb]> show tables; +------------------+ | Tables_in_testdb | +------------------+ | classes | | students | +------------------+ MariaDB [testdb]> desc students; +--------+-----------------------------+------+-----+----------+---------------+ | Field | Type | Null | Key | Default | Extra | +--------+-----------------------------+------+-----+---------+----------------+ | id | tinyint(3) unsigned | NO | PRI | NULL | auto_increment | | name | varchar(20) | YES | | NULL | | | age | tinyint(3) unsigned | YES | | NULL | | | gender | enum('男','女','人妖','保密') | NO | | 人妖 | | | cls_id | tinyint(3) unsigned | YES | | NULL | | +--------+-----------------------------+------+-----+---------+----------------+
查看錶的建立
MariaDB [testdb]> show create table students; …….. #列出語法 | students | CREATE TABLE `students` ( `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(20) DEFAULT NULL, `age` tinyint(3) unsigned DEFAULT NULL, `gender` enum('男','女','人妖','保密') NOT NULL DEFAULT '人妖', `cls_id` tinyint(3) unsigned DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 #默認引擎爲InnoDB ………
MariaDB處理引擎有InnoDB、MyISAM、blackhole等,最主要的區別在於InnoDB支持事務處理與外鍵和行級鎖。
2> 改字段
修改表:修改用命令alter
添加一個brithday字段,類型爲date
MariaDB [testdb]> alter table students add brithday date; MariaDB [testdb]> desc students; +----------+--------------------------------------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra | +----------+--------------------------------------+-----+---------+----------------+ | id | tinyint(3) unsigned | NO | PRI | NULL | auto_increment | | name | varchar(20) | YES | | NULL | | | age | tinyint(3) unsigned | YES | | NULL | | | gender | enum('男','女','人妖','保密') | NO |人妖 | | | | cls_id | tinyint(3) unsigned YES | |NULL | | | | brithday | date | YES | | NULL | |
更改字段名
MariaDB [testdb]> alter table students change brithday birthday date;
更改表的類型
MariaDB [testdb]> alter table students modify birthday datetime;
刪除字段
MariaDB [testdb]> alter table students drop birthday;
刪除表
MariaDB [testdb]> drop table students;
3> 給字段插入數據
向students表插入數據,value接值,ip爲1,name爲zxj,字符串類型用單引號引發,age爲250,high爲250.253,gender爲人妖id_cls爲1
MariaDB [testdb]> insert into students values (1,'zxj',250.253,'人妖',1);
查看插入的字段
MariaDB [testdb]> select * from students; +----+------+------+--------+--------+ | id | name | age | gender | cls_id | +----+------+------+--------+--------+ | 1 | zxj | 250 | 人妖 | 1 | +----+------+------+--------+--------+ 1 row in set (0.000 sec)
因爲id設置的是自增,所以每次插入時id都是增長的,爲體現效果,手動插入id爲4的一條數據
MariaDB [testdb]> select * from students; +----+------+------+--------+--------+ | id | name | age | gender | cls_id | +----+------+------+--------+--------+ | 1 | zxj | 250 | 人妖 | 1 | | 4 | zxj | 250 | 人妖 | 1 | +----+------+------+--------+--------+
MariaDB [testdb]> insert into students values (0,'zxj',250.253,'人妖',1); Query OK, 1 row affected (0.001 sec) MariaDB [testdb]> select * from students; +----+------+------+--------+--------+ | id | name | age | gender | cls_id | +----+------+------+--------+--------+ | 1 | zxj | 250 | 人妖 | 1 | | 4 | zxj | 250 | 人妖 | 1 | | 5 | zxj | 250 | 人妖 | 1 | +----+------+------+--------+--------+ 3 rows in set (0.000 sec)
MariaDB [testdb]> show create table students; …. ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 #當前默認值爲爲6,所以下一次默認添加數據時自增爲6
對部分插入,好比僅對name、age添加數據
MariaDB [testdb]> insert into students (name,age) values ('wrl' ,24); MariaDB [testdb]> select * from students; +----+------+------+--------+--------+ | id | name | age | gender | cls_id | +----+------+------+--------+--------+ | 1 | zxj | 250 | 人妖 | 1 | | 4 | zxj | 250 | 人妖 | 1 | | 5 | zxj | 250 | 人妖 | 1 | | 6 | wrl | 24 | 人妖 | NULL | #gender設置了默認值爲‘人妖’ +----+------+------+-------+---------+
刪除一條數據
MariaDB [testdb]> delete from students where id=6; #條件表達式where MariaDB [testdb]> select * from students; +----+------+------+--------+--------+ | id | name | age | gender | cls_id | +----+------+------+--------+--------+ | 1 | zxj | 250 | 人妖 | 1 | | 4 | zxj | 250 | 人妖 | 1 | | 5 | zxj | 250 | 人妖 | 1 | +----+------+------+--------+--------+
插入多條數據
MariaDB [testdb]> insert into students (name,age) values ('wrl' ,24),('my',23); #多條數據以逗號隔開,字符串加單引號 MariaDB [testdb]> select * from students; +----+------+------+--------+--------+ | id | name | age | gender | cls_id | +----+------+------+--------+--------+ | 1 | zxj | 250 | 人妖 | 1 | | 4 | zxj | 250 | 人妖 | 1 | | 5 | zxj | 250 | 人妖 | 1 | | 7 | wrl | 24 | 人妖 | NULL | | 8 | my | 23 | 人妖 | NULL |
4> 修改字段數據,用命令update
修改id>=7的數據的gender爲‘保密’
MariaDB [testdb]> update students set gender='保密' where id>=7; MariaDB [testdb]> select * from students; +----+------+------+----------+-------+ | id | name | age | gender |cls_id | +----+------+------+--------- +-------+ | 1 | zxj | 250 | 人妖 | 1 | | 4 | zxj | 250 | 人妖 | 1 | | 5 | zxj | 250 | 人妖 | 1 | | 7 | wrl | 24 | 保密 | NULL | | 8 | my | 23 | 保密 | NULL | +----+------+------+---------+--------+
因爲gender設置是枚舉,選項有四個,所以能夠用一、二、三、4來代替男、女、人妖、保密 四個選項。
MariaDB [testdb]> update students set gender=1 where id=7; MariaDB [testdb]> update students set gender=2 where id=8; MariaDB [testdb]> update students set gender=4 where name='zxj'; MariaDB [testdb]> select * from students; +----+------+------+---------+----------+ | id | name | age | gender | cls_id | +----+------+------+---------+----------+ | 1 | zxj | 250 | 保密 | 1 | | 4 | zxj | 250 | 保密 | 1 | | 5 | zxj | 250 | 保密 | 1 | | 7 | wrl | 24 | 男 | NULL | | 8 | my | 23 | 女 | NULL | +----+------+------+--------+-----------+
還能夠修改多條數據的多個字段(列),如
MariaDB [testdb]> update students set gender=2,age=23 where name='zxj'; Query OK, 3 rows affected (0.001 sec) Rows matched: 3 Changed: 3 Warnings: 0 MariaDB [testdb]> select * from students; +----+------+------+--------+--------+ | id | name | age | gender | cls_id | +----+------+------+--------+--------+ | 1 | zxj | 23 | 女 | 1 | | 4 | zxj | 23 | 女 | 1 | | 5 | zxj | 23 | 女 | 1 | | 7 | wrl | 24 | 男 |NULL | | 8 | my | 23 | 女 |NULL | +----+------+------+--------+--------+ 5 rows in set (0.000 sec)
5> 刪除
刪除students表中id爲四、5的數據
MariaDB [testdb]> delete from students where id=4; MariaDB [testdb]> delete from students where id=5; MariaDB [testdb]> select * from students; +----+------+------+--------+--------+ | id | name | age | gender | cls_id | +----+------+------+--------+--------+ | 1 | zxj | 23 | 女 | 1 | | 7 | wrl | 24 | 男 | NULL | | 8 | my | 23 | 女 | NULL | +----+------+------+--------+--------+
清空表。清空表的內容不要隨便用,會清除全部數據。
MariaDB [testdb]> delete from students;
面試:用delete並不會清除自增AUTO_UNCREMENT的值,若要清空表後重置自增值爲1,用truncate命令,truncate會清空表的全部內容且不可恢復(不能回滾)。
MariaDB [testdb]> truncate table students;
6> 邏輯刪除
用一條字段來表示這條信息是否已經不能在使用了,好比遊戲企業經過設置一個字段來表示哪些用戶活躍,哪些用戶不活躍等。通常企業都將邏輯刪除標記爲bit(0和1)。邏輯刪除並不會刪除磁盤數據。
先在students表中添加一個邏輯刪除標記ls_delete,bit類型,默認爲0
MariaDB [testdb]> alter table students add is_delete bit default 0; MariaDB [testdb]> desc students; ……… | is_delete | bit(1) | YES | | b'0' | MariaDB [testdb]> insert into students (name,age,is_delete) values ('jony',24,1); MariaDB [testdb]> select * from students; +----+------+------+--------+--------+-----------+ | id | name | age | gender | cls_id | is_delete | +----+------+------+--------+--------+-----------+ | 1 | zxj | 23 | 女 | 1 | | #bit=0數值較小,不顯示不表明沒有 | 7 | wrl | 24 | 男 | NULL | || 8 | my | 23 | 女 | NULL | | | 9 | jony | 24 | 人妖 | NULL | 口 | #bit=1 +----+------+------+--------+--------+-----------+ 4 rows in set (0.000 sec)
用is_delete來代表刪除項,如篩選bit不爲0的用戶
MariaDB [testdb]> select * from students where is_delete=0; +----+------+------+--------+--------+-----------+ | id | name | age | gender | cls_id | is_delete | +----+------+------+--------+--------+-----------+ | 1 | zxj | 23 | 女 | 1 | | | 7 | wrl | 24 | 男 | NULL | | | 8 | my | 23 | 女 | NULL | | +----+------+------+--------+--------+-----------+