`
阅读更多
MySQL使用CREATE TABLE语句创建表,简单语法如下。
CREATE TABLE table_name
(
     column_name_1 data_type_1 constraint_1,
     column_name_2 data_type_2 constraint_2,
     ...
     column_name_n data_type_n constraint_n
)
其中,column_name为表中的列名,data_type为列的数据类型,constraint为该列的限制说明。CREATE TABLE其完整语法是相当复杂的,因为存在很多的可选子句。
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] table_name
     (create_definition,...)
     [table_options]
     [[IGNORE|REPLACE] select_statement]
create_definition=
{

     column_declaration
     |PRIMARY KEY (index_columns)
     |KEY [index_name] (index_columns)
     |INDEX [index_name](index_columns)
     |UNIQUE [INDEX] [index_name] (index_columns)
     |[CONSTRAINT symbol] FOREIGN KEY index_name (index_columns)
     |[reference_definition]
     |CHECK (expression)
}


column_declaration=
     column_name column_data_type
          [NOT NULL|NULL] [DEFAULT default_value]
          [AUTO_INCREMENT] [PRIMARY KEY] [reference_definition]

reference_definition=
     REFERENCES table_name [(index_columns)]
          [MATCH FULL|MATCH PARTIAL]
          [ON DELETE refenece_option]
          [ON UPDATE refenece_option]

refenece_option=
     {RESTRICT|CASCADE|SET NULL|NO ACTION|SET DEFAULT}

其中,create_definition可以是列定义(column_declaration)、索引定义、FOREIGN KEY子句、reference_definition或CHECK子句。

1.列定义
列定义(column_declaration)以列名(column_name)和数据类型(column_type)开始,后面可跟几个可选的关键字。其中,列类型可以是第10.4节列出的任意类型,可跟在列类型之后的可选关键字包括以下几种。
     NULL或NOT NULL:指出该列是否可以包含NULL值。如果两者都不指出,缺省为NULL。
     DEFAULT default_value:给出该列的默认值,不能用于BLOB或TEXT列类型。如果无缺省说明,自动分配一个默认值。对于可取NULL值的列,默认值为NULL。对于不能为NULL的列,默认值如下。
Ø    数值列:对于AUTO_INCREMENT列,其默认值为该列的序列中的下一个数。否则,默认值为0。
Ø    日期和时间列:对于TIMESTAMP类型,默认值为当前日期和时间。否则,默认值为该类型的“零”值(例如,DATE类型的“零”值为“0000-00-00”)。
Ø    字符串类型:对于非ENUM列,默认值为空串。对于ENUM列,默认值为第一个枚举元素。
     AUTO_INCREMENT:仅用于整数列类型,使这一列上的数值自动增长。初始值可用AUTO_INCREMENT选项确明指定,缺省为1。AUTO_INCREMENT列还必须指定为UNIQUE索引或PRIMARY KEY,而且应该为NOT NULL。
     PRIMARY KEY:指定该列为主键。
     UNIQUE:指定该列为UNIQUE索引列。
2.索引定义
PRIMARY KEY、UNIQUE、INDEX和KEY子句定义索引。其中,PRIMARY KEY与UNIQUE指定值必须惟一的索引,即索引列上没有重复的值。INDEX和KEY意义相同,指定可以包含重复值的索引。索引基于index_columns中所指定的列,如果有多个列,用逗号将它们分隔。如果未给出索引名index_name,系统会根据第一个索引列的名称自动选一个。
下面的SQL语句建立一个含有3列的students表,在id列上创建主键索引,并在(name,age)列上创建INDEX索引。
CREATE TABLE students
(
     id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
     name VARCHAR(30) NOT NULL,
     age INT NOT NULL,
     PRIMARY KEY (id),
     INDEX(name,age)
)

13.3.2  创建不存在的表(IF NOT EXISTS)
在创建表时,有时候会因为已经同名冲突而创建失败。这时,需要事先做一个判断,看看是否存在同名的表,使用CREATE TABLE IF NOT EXISTS即可达到这个目的。
在事先不能判断是否存在重名冲突的时候,使用IF NOT EXISTS对于批量SQL程序脚本极为有用。如果使用普通的CREATE TABLE语句,程序第一次运行时,建立这些表,而第二次运行时将出错。如果用IF NOT EXISTS语句,就不会有问题:在第二次运行时,创建表失败,但不出错,程序可以继续向下运行。
下例中,首先检查是否存在表students,如果不存在,则创建之,否则,放弃创建。
CREATE TABLE IF NOT EXISTS students
(
     id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
     name VARCHAR(30) NOT NULL,
     age INT NOT NULL,
     PRIMARY KEY (id),
     INDEX(name,age)
)

13.3.3  创建临时表(TEMPORARY)
有时,需要临时创建一个中间表,完成一些临时存储数据的功能,在完成临时功能之后,再删除这些临时表。MySQL可用CREATE TEMPORARY TABLE来创建临时表,这些表在与服务器的交互结束时会自动删除,而且如果与服务器的交互异常结束,这些表仍会被删除。
举例:下面的SQL语句创建一个临时表temp_student。
CREATE TEMPORARY TABLE temp_student
(   id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
     name VARCHAR(30) NOT NULL,
     age INT NOT NULL,
     PRIMARY KEY (id),
     INDEX(name,age)
)
13.3.4  利用SELECT的结果创建表
在关系数据库中,任何数据都表示为行和列组成的二维表,而每条SELECT语句的结果也都是一个二维表。考虑到这种性质,有时,可以把查询结果构造为一个表,把查询数据存储起来,例如:
CREATE TABLE new_table_name SELECT * FROM talbe_name [WHERE ...]
举例:下面的SQL语句创建一个表young_students,内容为students中年龄小于20岁的学生。
CREATE TABLE young_students SELECT * FROM students WHERE age <20

另外,可以通过选择表的全部内容(无WHERE子句)来完全拷贝表,也可以利用一个总是失败的WHERE子句(如:“WHERE 1<>1”)来创建一个空表。如果希望利用LOAD DATA语句将数据文件装入一个表中,就需要首先创建一个具有相同结构的空表,如:
CREATE TABLE new_table_name SELECT * FROM talbe_name WHERE 1<>1
13.3.5  修改表(ALTER TABLE)
修改表指修改表的结构,当发现某个表的结构不满足要求时,可以用ALTERTABLE语句来修改表中列的属性,甚至可以修改表的名称。例如,原来的students表中没有“性别”属性,或者是“姓名”属性长度不够等,这些问题都可以通过修改表解决。
ALTER TABLE的语法如下。
ALTER [IGNORE] TABLE table_name action_list
MySQL 扩充了A LTER TABLE 语句,允许指定多个动作,各动作间以逗号分隔,每个action表示对表的一个修改。一方面,这方便多个修改操作;另一方面,这种方式能同时将所有VARCHAR列更改为CHAR列,从而实现将表从行可变长的表更改为行定长的表。
下面的例子给出了某些ALTER TABLE功能。
1.对表重新命名
这很简单,只需给出旧表名和新表名即可。
ALTER TABLE table_name RENAME AS new_table_name
2.更改列类型
为了更改列的类型,可使用CHANGE或MODIFY子句。
举例:假如表students中的列id为SMALLINT UNSIGNED的,希望将其更改为INT UNSIGNED的列。
ALTER TABLE students MODIFY id INT UNSIGNED
ALTER TABLE students CHANGE id id INT UNSIGNED
在CHANGE命令中列名id出现了两次,这是因为:CHANGE除了更改类型外还能更改列名,而MODIFY不能实现这个功能。如果希望在更改类型的同时重新将id 命名为sid,可按如下进行。
ALTER TABLE students CHANGE id sid INT UNSIGNED
注意
使用CHANGE更改了列的定义,并说明了一个包括列名的列的完整定义,即使不更改列名,也需要在定义中包括相应的列名。

3.将字符串列从可变长转换为定长
对字符串列来说,定长的列一般比变长的列处理更快。例如,students中列name的类型为VARCHAR,为了提高查询效率,需要转换为定长的CHAR列,可以修改如下。
ALTER TABLE students MODIFY name CHAR(40)
4.将字符串列从定长转换为可变长
虽然字符串列用定长行查询效率更快,但要占用更多的空间,使用可变长度的字符串列可以节省存储空间。这种转换更为容易:只需将某个CHAR列转换为VARCHAR列,MySQL 就自动地转换其他的CHAR列。
ALTER TABLE students MODIFY name VARCHAR(40)
其他对表结构的修改选项如上面所给出的示例相似,如果想详细了解action_list参数所有的操作,可以参考13.3.1中CREATE TABLE中create_definition参数的说明。
13.3.6  删除表(DROP TABLE)
删除表要比创建和修改表要容易得多,只需指定表名即可。
DROP TABLE table_name
MySQL对DROP TABLE语句在某些有用的方面做了扩充。首先,可在同一语句中指定几个表对它们进行删除,如:
DROP TABLE students,courses,...
其次,不能肯定一个表是否存在,如果存在就删除它,否则也不会出现错误时,可在DROPTABEL语句中增加IF EXISTS。
DROP TABLE IF EXISTS students
同CREATE TABLE一样,IF EXISTS语句在含有DROP TABLE的SQL脚本中很有用,如果不存在待删除的表,脚本会继续向下执行而不会抛出错误。
1:使用SHOW语句找出在服务器上当前存在什么数据库:
  mysql> SHOW DATABASES;
2:2、创建一个数据库MYSQLDATA
  mysql> CREATE DATABASE MYSQLDATA;
3:选择你所创建的数据库
  mysql> USE MYSQLDATA; (按回车键出现Database changed 时说明操作成功!)
4:查看现在的数据库中存在什么表
  mysql> SHOW TABLES;
5:创建一个数据库表
  mysql> CREATE TABLE MYTABLE (name VARCHAR(20), sex CHAR(1));
6:显示表的结构:
  mysql> DESCRIBE MYTABLE;
7:往表中加入记录
  mysql> insert into MYTABLE values ("hyq","M");
8:用文本方式将数据装入数据库表中(例如D:/mysql.txt)
  mysql> LOAD DATA LOCAL INFILE "D:/mysql.txt" INTO TABLE MYTABLE;
9:导入.sql文件命令(例如D:/mysql.sql)
  mysql>use database;
  mysql>source d:/mysql.sql;
10:删除表
  mysql>drop TABLE MYTABLE;
11:清空表
  mysql>delete from MYTABLE;
12:更新表中数据
  mysql>update MYTABLE set sex="f" where name='hyq';
 
 
以下是无意中在网络看到的使用MySql的管理心得,
摘自:http://www1.xjtusky.com/article/htmldata/2004_12/3/57/article_1060_1.html 
  
在windows中MySql以服务形式存在,在使用前应确保此服务已经启动,未启动可用net start mysql命令启动。而Linux中启动时可用“/etc/rc.d/init.d/mysqld start"命令,注意启动者应具有管理员权限。
刚安装好的MySql包含一个含空密码的root帐户和一个匿名帐户,这是很大的安全隐患,对于一些重要的应用我们应将安全性尽可能提高,在这里应把匿名帐户删除、 root帐户设置密码,可用如下命令进行:
use mysql;
delete from User where User="";
update User set Password=PASSWORD('newpassword') where User='root';
如果要对用户所用的登录终端进行限制,可以更新User表中相应用户的Host字段,在进行了以上更改后应重新启动数据库服务,此时登录时可用如下类似命令:
mysql -uroot -p;
mysql -uroot -pnewpassword;
mysql mydb -uroot -p;
mysql mydb -uroot -pnewpassword;
上面命令参数是常用参数的一部分,详细情况可参考文档。此处的mydb是要登录的数据库的名称。
在进行开发和实际应用中,用户不应该只用root用户进行连接数据库,虽然使用root用户进行测试时很方便,但会给系统带来重大安全隐患,也不利于管理技术的提高。我们给一个应用中使用的用户赋予最恰当的数据库权限。如一个只进行数据插入的用户不应赋予其删除数据的权限。MySql的用户管理是通过User表来实现的,添加新用户常用的方法有两个,一是在User表插入相应的数据行,同时设置相应的权限;二是通过GRANT命令创建具有某种权限的用户。其中GRANT的常用用法如下:
grant all on mydb.* to NewUserName@HostName identified by "password" ;
grant usage on *.* to NewUserName@HostName identified by "password";
grant select,insert,update on mydb.* to NewUserName@HostName identified by "password";
grant update,delete on mydb.TestTable to NewUserName@HostName identified by "password";
若要给此用户赋予他在相应对象上的权限的管理能力,可在GRANT后面添加WITH GRANT OPTION选项。而对于用插入User表添加的用户,Password字段应用PASSWORD 函数进行更新加密,以防不轨之人窃看密码。对于那些已经不用的用户应给予清除,权限过界的用户应及时回收权限,回收权限可以通过更新User表相应字段,也可以使用REVOKE操作。
下面给出本人从其它资料(www.cn-java.com)获得的对常用权限的解释:
全局管理权限:
FILE: 在MySQL服务器上读写文件。
PROCESS: 显示或杀死属于其它用户的服务线程。
RELOAD: 重载访问控制表,刷新日志等。
SHUTDOWN: 关闭MySQL服务。
数据库/数据表/数据列权限:
ALTER: 修改已存在的数据表(例如增加/删除列)和索引。
CREATE: 建立新的数据库或数据表。
DELETE: 删除表的记录。
DROP: 删除数据表或数据库。
INDEX: 建立或删除索引。
INSERT: 增加表的记录。
SELECT: 显示/搜索表的记录。
UPDATE: 修改表中已存在的记录。
特别的权限:
ALL: 允许做任何事(和root一样)。
USAGE: 只允许登录--其它什么也不允许做。

分享到:
评论

相关推荐

    MySQL常用命令(非常全面的命令大全)

    文件里有常用的MYsql命令 MySQL常用命令 文件里有常用的MYsql命令 MySQL常用命令

    MYSQL常用命令教程

    MYSQL常用命令,快速上手使用教程,简单txt格式

    Mysql常用操作语句.

    Mysql常用操作语句 Mysql常用操作语句 Mysql常用操作语句

    MySql常用命令MySql常用命令

    MySql常用命令 MySql常用命令 MySql常用命令

    MySQL常用命令 MySQL常用命令

    MySQL常用命令 MySQL常用命令 MySQL常用命令

    MYSQL常用命令(帮助你快速的使用MYSQL)

    MYSQL常用命令MYSQL常用命令MYSQL常用命令 MYSQL常用命令MYSQL常用命令 MYSQL常用命令

    邓炜MYSQL常用操作命令

    MYSQL常用操作命令 大纲 一、mysql 常用命令 二、mysql 导入、导出文件 1.mysql服务的启动和停止 net stop mysql net start mysql 2. 显示数据库列表 缺省有两个数据库:mysql和test show databases; 3.显示库中的...

    MySQL常用命令汇总.rar

    MySQL常用命令汇总 包含数据库使用以及navicat 快捷键水说明很详细, 包含命令行的是使用以及连接数据库如何操作的详细说明

    MYSQL常用命令三 总结

    mysql中常用的命令讲解 mysql中常用的命令讲解 mysql中常用的命令讲解 mysql中常用的命令讲解 mysql中常用的命令讲解 mysql中常用的命令讲解 mysql中常用的命令讲解 mysql中常用的命令讲解 mysql中常用的命令讲解 ...

    MySql常用命令 最新 最全

    基于MySQL数据库的常用命令 最新版

    MySQL常用命令

    MySQL常用命令MySQL常用命令MySQL常用命令

    MYSQL常用命令一.docx

    mysql中常用的命令讲解 mysql中常用的命令讲解 mysql中常用的命令讲解 mysql中常用的命令讲解 mysql中常用的命令讲解 mysql中常用的命令讲解 mysql中常用的命令讲解 mysql中常用的命令讲解 mysql中常用的命令讲解 ...

    MYSQL常用命令一.doc

    mysql中常用的命令讲解 mysql中常用的命令讲解 mysql中常用的命令讲解 mysql中常用的命令讲解 mysql中常用的命令讲解 mysql中常用的命令讲解 mysql中常用的命令讲解 mysql中常用的命令讲解 mysql中常用的命令讲解 ...

    MySQL常用命令大全

    MySQL常用命令大全,常用mysql命令行命令 .MySql中的SQL语句.

    MySQL常用命令总结.txt

    MySQL常用命令总结 MySQL常用命令总结

    MYSQL常用命令三.docx

    mysql中常用的命令讲解 mysql中常用的命令讲解 mysql中常用的命令讲解 mysql中常用的命令讲解 mysql中常用的命令讲解 mysql中常用的命令讲解 mysql中常用的命令讲解 mysql中常用的命令讲解 mysql中常用的命令讲解 ...

    MYSQL常用命令二.docx

    mysql中常用的命令讲解 mysql中常用的命令讲解 mysql中常用的命令讲解 mysql中常用的命令讲解 mysql中常用的命令讲解 mysql中常用的命令讲解 mysql中常用的命令讲解 mysql中常用的命令讲解 mysql中常用的命令讲解 ...

    MySql常用命令总结

    MySql常用命令总结MySql常用命令总结MySql常用命令总结MySql常用命令总结MySql常用命令总结MySql常用命令总结

    MYSQL常用命令二-.doc

    mysql中常用的命令讲解 mysql中常用的命令讲解 mysql中常用的命令讲解 mysql中常用的命令讲解 mysql中常用的命令讲解 mysql中常用的命令讲解 mysql中常用的命令讲解 mysql中常用的命令讲解 mysql中常用的命令讲解 ...

    MYSQL常用命令大全

    MYSQL常用命令 1.导出整个数据库 mysqldump -u 用户名 -p --default-character-set=latin1 数据库名 &gt; 导出的文件名(数据库默认编码是latin1) mysqldump -u wcnc -p smgp_apps_wcnc &gt; wcnc.sql 2.导出一个表 ...

Global site tag (gtag.js) - Google Analytics