天天看点

【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)

顺序不一致时,会报错,字段类型不一致时也会报错。