`
阅读更多
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 服务 - **启动 MySQL 服务**: ...

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

    ### MySQL常用命令详解 #### 一、连接与断开MySQL **命令格式:** ``` mysql -h [主机地址] -u [用户名] -p [密码] ``` **示例:** 1. **本地连接MySQL服务:** ```bash mysql -uroot -p ``` 输入此命令后,...

    Mysql常用操作语句.

    Mysql常用操作语句 Mysql是当前最流行的开源关系型数据库管理系统之一,对于 PHP+Mysql 技术的新手来说,掌握Mysql的基本操作语句是必不可少的。本文将详细介绍Mysql的基本操作语句,包括登录、数据库操作、表操作...

    MySQL常用命令汇总.rar

    以上仅是MySQL常用命令的一部分,实际操作中还有更多高级功能,如视图、存储过程、触发器、索引、事务处理等。通过深入学习和实践,你可以更高效地管理和维护MySQL数据库。在“MySQL常用命令汇总.pdf”文件中,应有...

    mysql常用操作命令

    mysql常用操作命令 mysql是一个流行的关系数据库管理系统,作为开发人员,掌握mysql的常用操作命令是非常必要的。本文将对mysql的常用操作命令进行总结,包括连接mysql、查询版本信息、查询当前日期、查询服务器中...

    MySQL常用命令 MySQL常用命令

    MySQL 常用命令 MySQL 是一个流行的开源关系数据库管理系统,它提供了许多实用的命令来管理和维护数据库。在本资源中,我们将总结一些常用的 MySQL 命令,涵盖数据库创建、用户管理、数据备份和恢复、查询执行等...

    MySQL常用操作命令

    MySQL常用操作命令 MySQL是一种关系数据库管理系统,常用于各种应用程序的数据存储和管理。本文将介绍MySQL常用的操作命令,包括启动MySQL服务器、进入交互操作界面、退出交互操作界面、执行基本的SELECT命令、使用...

    mysql常用命令集锦--初级DBA

    MySQL常用命令集锦--初级DBA MySQL是当前最流行的开源关系数据库管理系统,本文将总结一些常用的MySQL命令,适合初级DBA学习和工作。 一、MySQL服务的启动和停止 MySQL服务的启动和停止命令如下: * ...

    mysql常用命令总结

    ### MySQL常用命令总结 本文将基于提供的部分内容对MySQL的基本操作命令进行详细解析,这些命令涵盖了数据库及表的基本管理,如创建、查询、更新等。掌握这些命令有助于更好地管理和操作MySQL数据库。 #### 一、...

    mysql常用操作命令大全

    ### MySQL常用操作命令详解 #### 一、启动与退出 **1. 进入MySQL:** 对于新手而言,了解如何进入MySQL至关重要。通过SSH连接到服务器后,可以通过以下命令来连接MySQL服务: ```sql mysql -u 用户名 -p ```...

    MySQL常用命令总结.txt

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

    MYSQL常用命令详细介绍

    ### MySQL常用命令详解 #### 启动MySQL服务器 在启动MySQL服务器方面,有两种常见的方法: 1. **使用winmysqladmin工具**:这是一个图形化的工具,适用于Windows系统。如果你的计算机在启动时已经设置了自动运行...

    MySQL常用操作基本

    ### MySQL 常用操作基本知识点详解 #### 一、导出数据库 1. **完整导出** - **命令格式**: ``` mysqldump -u 用户名 -p --default-character-set=字符集 数据库名 &gt; 文件名 ``` - **示例**: ``` mysqldump...

    MySQL常用命令.doc

    以下是一些关于MySQL常用命令的详细说明: 1. **创建和管理数据库**: - `create database name;` 用于创建一个新的数据库,name是数据库的名称。 - `use databasename;` 用于切换到指定的数据库。 - `drop ...

    Linux下mysql常用操作命令总结

    ### Linux下MySQL常用操作命令总结 #### 一、MySQL登录与退出 在Linux环境下操作MySQL时,首先需要确保MySQL服务已经正确安装并且运行。登录MySQL可以通过以下方式: 1. **定位MySQL目录**:通常MySQL的数据文件...

    MySQL常用命令视频教程及笔记

    MySQL是世界上最受欢迎的关系型...通过学习这些MySQL常用命令,你可以对数据库进行基本的创建、查询、修改和删除操作,同时了解如何更高效地管理和维护数据库。在实际工作中,熟练掌握这些命令能够极大地提升工作效率。

Global site tag (gtag.js) - Google Analytics