開始學習mysql ,記錄自己學習的一點記錄。
--建立資料庫company
mysql> create database company;
query ok, 1 row affected (0.00 sec)
--要知道系統中有那些資料庫,可以使用如下指令來查詢:
mysql> show databases;
+--------------------+
| database |
| information_schema |
| company |
| mysql |
| test |
4 rows in set (0.00 sec)
information_schema --主要存儲了系統中的一些資料庫對象資訊,比如使用者表資訊,列資訊,權限資訊, 字元集資訊,分區資訊。
mysql --存儲了系統的使用者權限資訊
test --系統自動建立的資料庫,任何人都可以使用。
--查詢目前使用的資料庫。
mysql> select database();
+------------+
| database() |
| null |
1 row in set (0.00 sec)
mysql> use company;
database changed
| company |
--删除資料庫company
mysql> drop database company;
query ok, 0 rows affected (0.03 sec)
-使用use dbname 選擇要連接配接的資料庫
mysql> use mysql;
--檢視mysql資料庫中存在的資料表。
mysql> show tables;
+---------------------------+
| tables_in_mysql |
| columns_priv |
| db |
| event |
| func |
| general_log |
| help_category |
| help_keyword |
| help_relation |
| help_topic |
| host |
| ndb_binlog_index |
| plugin |
| proc |
| procs_priv |
| servers |
| slow_log |
| tables_priv |
| time_zone |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| user |
23 rows in set (0.03 sec)
--建立表,由于mysql的表名是以目錄的形式存在磁盤上的,是以表名要符合任何目錄名允許的字元。
mysql> create table dept(deptno int(4),deptname varchar(50));
query ok, 0 rows affected (0.00 sec)
--檢視表結構。
mysql> desc dept;
+----------+-------------+------+-----+---------+-------+
| field | type | null | key | default | extra |
| deptno | int(4) | yes | | null | |
| deptname | varchar(50) | yes | | null | |
2 rows in set (0.00 sec)
mysql> create table employee (eid int(4),ename varchar(50), birthday date,deptno
int (4));
query ok, 0 rows affected (0.01 sec)
---檢視構造表的ddl語句。
mysql> show create table employee \g
*************************** 1. row ***************************
table: employee
create table: create table `employee` (
`eid` int(4) default null,
`ename` varchar(50) default null,
`birthday` date default null,
`deptno` int(4) default null
) engine=innodb default charset=latin1
--alter table 的使用方法。
--修改表名。
mysql> alter table employee rename emp;
mysql> desc emp;
| eid | int(4) | yes | | null | |
| ename | varchar(50) | yes | | null | |
| birthday | date | yes | | null | |
mysql> show tables ;
+-------------------+
| tables_in_company |
| dept |
| emp |
--修改表中列名。
alter table tabname change column old_col_name new_col_name col_definition
--将birthday 改為 birthdate
mysql> alter table emp change birthday birdate date;
records: 0 duplicates: 0 warnings: 0
+---------+-------------+------+-----+---------+-------+
| field | type | null | key | default | extra |
| eid | int(4) | yes | | null | |
| ename | varchar(50) | yes | | null | |
| birdate | date | yes | | null | |
| deptno | int(4) | yes | | null | |
4 rows in set (0.01 sec)
--修改表中字段的類型
alter table tabname modify [column] column_definition [first|after col_name]
mysql> alter table emp modify eid int(5);
mysql> alter table emp modify sex char(2) first;
| sex | char(2) | yes | | null | |
| eid | int(5) | yes | | null | |
5 rows in set (0.01 sec)
比較一下 change 與modify的差別:
1 change 和 modify 都可以修改表的定義,不同的是change後面需要寫兩次列名,不友善,
2 但是change的優點是可以修改表中的列名稱,而modify則不能。
alter table tabname add new_column after/before ole_column;
alter table emp modify age int(3) first;
--增加表中的字段
文法:
alter table tabname add [column] column_definition [first|after col_name]
mysql> alter table emp add column sex char(2);
query ok, 0 rows affected (0.02 sec)
5 rows in set (0.00 sec)
--
mysql> alter table emp add column sex char(2) after ename;
error 1060 (42s21): duplicate column name 'sex'
--删除表中的字段。
mysql> alter table emp drop column sex;
--指定添加字段所在的位置。預設是添加到表中末尾。
--注意:change\first\after column 是mysql 在标準sql的拓展。在其他資料庫上不一定适用
--關于dml 語句這裡和sql标準一樣的就不再多做介紹了,重點說一下 insert 插入操作:
insert into tabname(col1,col2,...) values(val1,val2,...)
--mysql支援如下操作:
mysql> insert into dept(deptno ,deptname) values (1002,'ceo');
mysql> insert into dept(deptno ,deptname) select 1003,'manager';
records: 1 duplicates: 0 warnings: 0
mysql> select * from dept;
+--------+----------+
| deptno | deptname |
| 1001 | hr |
| 1002 | ceo |
| 1003 | manager |
3 rows in set (0.00 sec)
insert into tabname(col1,col2,...) select val1,val2,..[,select val1,val2,...]
其中 val與 col 的類型必須一緻。否則:
mysql> insert into emp select 10001,'zhangsan','2010-12-30',1001;
error 1136 (21s01): column count doesn't match value count at row 1
5 rows in set (0.02 sec)
順序不一緻時,會報錯,字段類型不一緻時也會報錯。