开始学习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)
顺序不一致时,会报错,字段类型不一致时也会报错。