天天看點

【Mysql 學習】mysql 的使用入門

開始學習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)

順序不一緻時,會報錯,字段類型不一緻時也會報錯。