MariaDB數據庫(二)

1. MariaDB數據類型

  MariaDB數據類型能夠分爲數字,日期和時間以及字符串值。mysql

  使用數據類型的原則:夠用就行,儘可能使用範圍小的,而不用大的。linux

1.1  經常使用的數據類型

  整數: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.2  約束

  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

2. SQL語句增刪改

進入數據庫

[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   |           |
+----+------+------+--------+--------+-----------+
相關文章
相關標籤/搜索