操作數據庫
創建數據庫
//創建數據庫,並先檢查是否已經存在,可省略不檢查
CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [,...]]
//創建的條件
create_specification:
[DEFAULT]CHARACTER SET charset_name指定數據庫採用的字符集
[DEFAULT]COLLATE collation_name指定數據庫字符集的比較方式
例一:創建一個名爲mydb1的數據庫
CREATE DATABASE mydb1;
例二:創建一個使用gbk字符集的mydb2數據庫
CREATE DATABASE mydb2 CHARACTER SET gbk;
例三:創建一個使用utf-8字符集,並帶校對規則的mydb3數據庫【校對規則見MySQL文檔】
CREATE DATABASE mydb3 character set utf8 collate utf8_bin;
查看數據庫
//顯示數據庫語句
SHOW DATABASES
//顯示數據庫創建語句
SHOW CREATE DATABASE db_name
例一:查看當前數據庫服務器中的所有數據庫
show databases;
例二:查看mydb2數據庫的定義信息
show create database mydb2;
修改數據庫
ALTER DATABASE [IF NOT EXISTS] db_name [alter_specification [,...]]
alter_specifucation:
[DEFAULT]CHARACTER SET charset_name
[DEFAULT]COLLATE collation_name
例一:查看服務器中的數據庫,並把其中一個庫的字符集改爲utf8
show create database mydb2;
alter database mydb2 character set utf8;
刪除數據庫
DROP DATABASE [IF EXISTS] db_name
例一:刪除mydb1
drop database mydb1;
選擇數據庫
USE db_name
SELECT DATABASE();查看數據庫
例一:選擇mydb1數據庫
use mydb1;
例二:查看當前選擇的數據庫
select database();
數據庫中表的操作
MySQL數據庫中的數據類型
整型數據:
數據類型 | 字節數 | 無符號數的取值範圍 | 有符號數的取值範圍 |
---|---|---|---|
TINYINT | 1 | 0~255 | -128~127 |
SMALLINT | 2 | 0~65535 | -32768~32768 |
MEDIUMINT | 3 | 0~16777215 | -8388608~8388608 |
INT | 4 | 0~4294967295 | -2147483648~2147483648 |
BIGINT | 8 | 0~18446744073709551615 | -9223372036854775808~9223372036854775808 |
浮點數類型和定點數類型
數據類型 | 字節數 |
---|---|
FLOAT | 4 |
DOUBLE | 8 |
DECIMAL(M,D)【M表示數據長度,D表示小數點後的長度】 | M+2 |
日期與時間類型
數據類型 | 字節數 | 日期格式 | 零值 |
---|---|---|---|
YEAR | 1 | YYYY | 0000 |
DATE | 4 | YYYY-MM-DD | 0000-00-00 |
TIME | 3 | HH:MM:SS | 00:00:00 |
DATETIME | 8 | YYYY-MM-DD HH:MM:SS | 0000-00-00 00:00:00 |
TIMESTAMP | 4 | YYYY-MM-DD HH:MM:SS | 0000-00-00 00:00:00 |
字符串和二進制類型
CHAR:固定長度字符串,char(4),查詢速度快
VARCHAR:可變長度字符串,varchar(4)
BINARY和VARBINARY類型,同上
TEXT類型【存大文本】:TINYTEXT,TEXT,MEDIUMTEXT,LONGTEXT
BLOB類型【存大二進制】:TINYBLOB,BLOB,MEDIUMBLOB,LONGBLOB
ENUM類型:枚舉類型
SET類型:同枚舉,但存儲的是每個值的序號
BIT類型:表示二進制數,BIT(1)表示1位二進制
增加表
CREATE TABLE table_name
(
field1 datatype,
field2 datatype,
field3 datatype,
)character set 字符集 collate
校對規則【一般不指定,使用數據庫默認的字符集和校對規則】
//field:指定列名,datatype:指定列類型
create table employee(
id int,
name varchar(20),
gender char(1),
birthday date,
entry_date date,
job varchar(50),
salay double,
resume text
);
查看錶
SHOW TABLES;查看所有表
DESC employee;查看employee表結構
SHOW CREATE TABLE employee;查看建表語句
修改表
//增加一列
ALTER TABLE table_name ADD(column datatype [DEFAULT expr][,column datatype]...);
//修改列屬性
ALTER TABLE table_name MODIFY(column datatype [DEFAULT expr][,column datatype]...);
//刪除列
ALTER TABLE table_name DROP(column);
//修改表名
REMANE TABLE 表名 TO 新表名;
//修改列的名稱
ALTER TABLE table_name change [column] old_name new_name datatype;
//修改表的字符集編碼
ALTER TABLE table_name CHARACTER SET utf8;
例一:在員工表中添加一列image列
alter table employee add image blob;
例二:修改job列,使其長度爲60
alter table employee modify job varchar(60);
例三:刪除gender列
alter table employee drop gender;
例四:表名改爲user
rename table employee to user;
例五:修改表的字符集爲utf8
alter table user character set utf8;
例六:列名name修改爲username
alter table user change name username varchar(20);
刪除表
DROP TABLLE table_name;
例一:刪除user表
drop table user;
表的約束
概述:爲了防止數據表中插入錯誤的數據,需要對錶定義一些規則,即表的約束。
約束條件 說明
PRIMARY KEY 主鍵約束,用於唯一標識對應的記錄
FOREIGN KEY 外鍵約束
NOT NULL 非空約束
UNIQUE 唯一性約束
DEFFAULT 默認值約束,用於設置字段的默認值
主鍵約束 PRIMARY KEY
//1.單字段主鍵
CREATE TABLE example1(id INT PRIMARY KEY,
name VARCHAR(20)
);
//多字段主鍵
CREATE TABLE example1(id INT,
name VARCHAR(20),
grade FLOAT,
PRIMARY KEY(id,name)
);
非空約束 NOT NULL
CREATE TABLE example1(id INT,
name VARCHAR(20) NOT NULL,
grade FLOAT,
PRIMARY KEY(id,name)
);
唯一約束 UNIQUE
CREATE TABLE example1(id INT,
name VARCHAR(20) NOT NULL,
grade FLOAT UNIQUE,
PRIMARY KEY(id,name)
);
默認約束 DEFAULT
CREATE TABLE example1(id INT,
name VARCHAR(20) NOT NULL,
grade FLOAT,
job VARCHAR(20) DEFAULT 'sxs',
PRIMARY KEY(id,name)
);
設置表的字段值自動增加(AUTO_INCREMENT)
CREATE TABLE example1(id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
grade FLOAT
);
索引
概述:在數據庫操作中,需要經常查詢其中一條記錄,比如,查詢id=1000的記錄,這時候就需要一種效率高的查詢方法,即索引。是對錶中的值進行排列後的一種結構。
普通索引:是由KEY或者INDEX定義的索引,可以創建在任何類型,其值是否唯一或者非空沒有要求。
唯一性索引:由UNIQUE定義的所以,該索引字段必須唯一
全文索引:由FULLTEXT定義的所以,只能創建在char、varchar或者text類型的字段上,並且只有MyISAM存儲引擎支持全文索引
單列索引:指在表中單個字段上創建索引,可以是普通索引,唯一索引或者全文索引
多列索引:指表中多個字段上創建索引,只有在查詢中使用了這些字段中的第一個字段時,該索引纔會被使用
空間索引:由SPATIAL定義的索引,只能創建在空間數據類型的字段上。只能在存儲引擎爲MyISAM的表中創建
空間數據類型:GEOMETRY,POINT,LINESTRING,POLYGON
創建索引
創建表的時候創建索引
CREATE TABLE 表名(
字段名 數據類型 [完整性約束條件]
....
[UNIQUE或FULLTEXT或SPATIAL] INDEX或KEY [別名] (字段名1 [(長度)]) [ASC或者DESC]
);
例一:創建普通索引
CREATE TABLE example1(id INT, name VARCHAR(20) NOT NULL, grade FLOAT, INDEX (id));
例二:創建唯一索引
CREATE TABLE example1(id INT, name VARCHAR(20) NOT NULL, grade FLOAT, UNIQUE INDEX unique_id(id ASC););
例三:創建全文索引
CREATE TABLE example1(id INT, name VARCHAR(20) NOT NULL, grade FLOAT, FULLTEXT INDEX fulltext_name(name))ENGINE = MyISAM;
例四:創建多列索引
CREATE TABLE example1(id INT, name VARCHAR(20) NOT NULL, grade FLOAT, INDEX multi(id,name(20)));
例五:創建空間索引
CREATE TABLE example1(id INT, name VARCHAR(20) NOT NULL, grade FLOAT, space GEOMETRY NOT NULL, SPATIAL INDEX sp(space))ENGINE = MyISAM;
CREATE INDEX語句
CREATE [UNIQUE或者FULLTEXT或者SPATIAL] INDEX 索引名 ON 表名 (字段名 [(長度)] [ASC或者DESC]);
例一:對book表創建普通索引
CREATE INDEX index_id ON book (id)
例二:創建唯一索引
CREATE UNIQUE INDEX uniqueidx ON book (id);
使用ALTER TABLE語句創建索引
ALTER TABLE 表名 ADD [UNIQUE或者FULLTEXT或者SPATIAL] INDEX 索引名 (字段名 [(長度)] [ASE或者DESC]);
例一:在book表上創建普通索引
ALTER TABLE book ADD INDEX indexone (id);
刪除索引
ALTER TABLE 表名 DROP INDEX 索引名;
DROP INDEX 索引名 ON 表名;