目錄python
表就至關於時文件,表中的一條記錄就至關於文件的一行內容,不一樣的是表中的一條記錄有對應的標題,稱之爲表的字段mysql
例子:有一個名爲student的文件sql
id,name,age,sex , course數據庫
1 , 張三,17,男,語文優化
2,李四,18,男,英語編碼
3,王二,19,女,數學code
4 劉一 ,18 ,女, 化學事務
如今咱們把上面的文件改成一個表的話,應該是下面的樣子內存
id | name | age | sex | course |
---|---|---|---|---|
1 | 張三 | 17 | 男 | 語文 |
2 | 李四 | 18 | 男 | 英語 |
3 | 王二 | 19 | 女 | 數學 |
4 | 劉一 | 18 | 女 | 化學 |
id,name,age,sex,course 稱之爲上面表的字段,其他的一行內容稱之爲是一條記錄ci
create table [數據庫名.]表名(字段名1 類型[(寬度) 約束條件],字段名2 類型[(寬度) 約束條件],字段名1 類型[(寬度) 約束條件]);
1.先建一個庫mydb create database mydb; 使用默認字符編碼的 2.打開這個mydb數據庫,在這個庫裏建立表t1 use mydb; create table tb1(id int(1),name varchar(10),age int(2),sex varchar(2),course varchar(8)) # 2.能夠不打開表直接在mydb這個庫裏直接建立表t1 # create table mydb.tb1(id int,name varchar,age int,sex char,course char); 3.建立表之後顯示mydb庫裏面的全部表 show tables; 4.查看錶t1的結構 desc t1; 5.查看錶t1中的全部記錄 select * from [數據庫名.]t1; 6.查看錶t1中某個字段的數據 select id,name,age,sex,course from t1; ################################## cmd終端運行 ########################################## mysql> create database mydb; Query OK, 1 row affected (0.00 sec) mysql> use mydb; Database changed mysql> create table t1 (id int(1),name varchar(10),age int(2),sex varchar(2),course varchar(8)); Query OK, 0 rows affected (0.37 sec) mysql> show tables; +----------------+ | Tables_in_mydb | +----------------+ | t1 | +----------------+ 1 row in set (0.00 sec) mysql> desc t1; +--------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+-------------+------+-----+---------+-------+ | id | int(1) | YES | | NULL | | | name | varchar(10) | YES | | NULL | | | age | int(2) | YES | | NULL | | | sex | varchar(2) | YES | | NULL | | | course | varchar(8) | YES | | NULL | | +--------+-------------+------+-----+---------+-------+ 5 rows in set (0.02 sec) mysql> select * from t1; Empty set (0.00 sec) mysql> select id,name,age,sex,course from t1; Empty set (0.00 sec) ########################################## end ########################################
咱們在某些狀況下,建立表的的字段類型長度和約束條件是能夠省略的
數據庫表的引擎:驅動數據的方式 - 數據庫優化
注意:引擎是建表的規定,提供給表使用的,, 不是數據庫
展現全部引擎:show engines
四種引擎
innodb(建立表時默認的):支持事務,行級鎖,外鍵
create table t11(id int)engine=innodb;
myisam:查詢的效率要優於innodb,不須要支持事務,行級鎖, 外鍵, 可經過設置myisam來優化數據庫
create table t12(id int)engine=myisam;
blackhole:存進去的數據都會消失(能夠理解不存數據)
create table t13(id int)engine=blackhole;
memory:表結構式存儲在硬盤上的,可是表數據所有存儲在內存中(斷電即消失的)
create table t14(id int)engine=memory;
insert [into] [數據庫名.]表名[(字段名1,字段名2,字段名3····)] values(字段對應的值)
1.在當前數據庫時後表插入一條數據,加中括號帶字段名的(可省略數據庫名.) use mydb; insert into t1 (id,name,age,sex,course) values(1,'xichen',18,'女','語文'); 2.不在當前數據庫的時候,t1表插入一條數據(記錄) insert into mydb.t1(id,name,age,sex,course) values(2,'chen',19,'女','數學'); 3.省略字段名,向表t1中添加一條數據 insert into t1 values(3,'xixi',19,'男','數學'); 4.一次性向表中添加多條數據 insert into t1 values(4,'haha',19,'女','語文'), (5,'lele',19,'男','英語'), (6,'dada',20,'男','數學'); ##################################### cmd ############################################### mysql> use mydb; Database changed mysql> insert into t1(id,name,age,sex,course) values(1,'xichen',18,'女','語文'); Query OK, 1 row affected, 2 warnings (0.06 sec) mysql> insert into mydb.t1(id,name,age,sex,course) values (2,'chen',19,'女','數學'); Query OK, 1 row affected, 2 warnings (0.13 sec) mysql> insert into t1 values(3,'xixi',19,'男','數學'); Query OK, 1 row affected, 2 warnings (0.13 sec) mysql> insert into t1 values(4,'haha',19,'女','英語'),(5,'lele',19,'男','語文'),(6,'dada',20,'男','數學'); Query OK, 3 rows affected, 6 warnings (0.13 sec) Records: 3 Duplicates: 0 Warnings: 6 mysql> select * from t1; +------+--------+------+------+--------+ | id | name | age | sex | course | +------+--------+------+------+--------+ | 1 | xichen | 18 | 女 | 語文 | | 2 | chen | 19 | 女 | 數學 | | 3 | xixi | 19 | 男 | 數學 | | 4 | haha | 19 | 女 | 語文 | | 5 | lele | 19 | 男 | 英文 | | 6 | dada | 20 | 男 | 數學 | +------+--------+------+------+--------+ 6 rows in set (0.00 sec) ###################################### end #############################################
1. desc [tablename]; 能夠查看當前表的結構 雖然desc 方法能夠查看當前表的結構,可是他輸出的信息還不夠全面
2.show creat table 表名[\G]; 獲得更全面的表定義信息,除了能夠看到表定義以外,還能夠看到engine(存儲引擎)和charset(字符集)等信息。(\G選項的含義是是的記錄可以豎向排列,以便更好的顯示內容較長的記錄。)
1.顯示t1表的結構(desc t1;) 2.顯示建立表定義的表結構(show create table t1;) 3.以樹狀形式顯示錶的機構(show create table t1\G;) ######################################### cmd ########################################### mysql> desc t1; +--------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+-------------+------+-----+---------+-------+ | id | int(1) | YES | | NULL | | | name | varchar(10) | YES | | NULL | | | age | int(2) | YES | | NULL | | | sex | char(2) | YES | | NULL | | | course | char(10) | YES | | NULL | | +--------+-------------+------+-----+---------+-------+ 5 rows in set (0.02 sec) mysql> show create table t1; +-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | t1 | CREATE TABLE `t1` ( `id` int(1) DEFAULT NULL, `name` varchar(10) DEFAULT NULL, `age` int(2) DEFAULT NULL, `sex` char(2) CHARACTER SET utf8 DEFAULT NULL, `course` char(10) CHARACTER SET utf8 DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1 | +-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) mysql> show create table t1\G; *************************** 1. row *************************** Table: t1 Create Table: CREATE TABLE `t1` ( `id` int(1) DEFAULT NULL, `name` varchar(10) DEFAULT NULL, `age` int(2) DEFAULT NULL, `sex` char(2) CHARACTER SET utf8 DEFAULT NULL, `course` char(10) CHARACTER SET utf8 DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1 1 row in set (0.00 sec) ERROR: No query specified ###################################### end ##############################################
1. 修改表名 alter table 舊錶名 rename 新表名; 2.增長表中字段 alter table 表名 add 字段名 數據類型[完整性約束條件····],add··· 3.刪除表中字段 alter table 表名 drop 字段名; 4.修改表中字段 alter table 表名 MODIFY 字段名 數據類型 [完整性約束條件…]; alter table 表名 change 舊字段名 新字段名 舊數據類型 [完整性約束條件…]; alter table 表名 change 舊字段名 新字段名 新數據類型 [完整性約束條件…]; 5.修改字段在表中的排列順序/在增長的時候指定位置 alter table 表名 add 字段名 數據類型 [完整性約束條件…] frist; alter table 表名 add 字段名 數據類型 [完整性約束條件…] after 字段名; alter table 表名 change 舊字段名 新字段名 新數據類型 [完整性約束條件…] frist; alter table 表名 modify 數據類型 [完整性約束條件…] after 字段名;
1.將t1表名改成t2 alter table t1 rename t2; 2.向t2表中增長hobby字段 alter table t2 add hobby char(8); 3.刪除t2表中的hobby字段 alter table t2 drop hobby; 4.把t2表中的course字段的寬度 alter table t2 modify course char(8); 5. 把t2表中的course字段改成class alter table t2 change course class char(20) 6.把t2表的age字段放在sex字段後 alter table t2 modify age int(2) after sex; ########################################### cmd ######################################### mysql> alter table t1 rename t2; Query OK, 0 rows affected (1.10 sec) mysql> alter table t2 add hobby char(8) character set 'utf8'; Query OK, 0 rows affected (0.70 sec) mysql> alter table t2 drop hobby; Query OK, 0 rows affected (0.56 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> alter table t2 modify course char(8); Query OK, 5 rows affected, 5 warnings (0.97 sec) Records: 5 Duplicates: 0 Warnings: 5 mysql> alter table t2 change course class char(20) character set 'utf8'; Query OK, 5 rows affected (0.94 sec) Records: 5 Duplicates: 0 Warnings: 0 mysql> select * from t2; +------+--------+------+------+-------+ | id | name | age | sex | class | +------+--------+------+------+-------+ | 1 | xichen | 18 | 女 | ?? | | 2 | chen | 19 | 女 | ?? | | 3 | xixi | 19 | 男 | ?? | | 4 | haha | 19 | 女 | ?? | | 6 | dada | 20 | 男 | ?? | +------+--------+------+------+-------+ 5 rows in set (0.00 sec) mysql> alter table t2 modify age int(2) after sex; Query OK, 0 rows affected (0.69 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> desc t2; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(1) | YES | | NULL | | | name | varchar(10) | YES | | NULL | | | sex | char(2) | YES | | NULL | | | age | int(2) | YES | | NULL | | | class | char(20) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 5 rows in set (0.02 sec) ####################################### end #############################################
drop table 表名;