myql查询创建表语句SHOW CREATE TABLE table_name

技术背景:
刚开始学习MySQL时候,有时偷懒,会用SHOW CREATE TABLE 表名\G来复制表创建语句,可是当运行的时候总会因为"表名和列名上有单引号",提示语法错误不能运行。
问题列表:
1,为什么会出错呢?
2,有什么解决方法?
解决问题:
1,分析show create table拷贝的语句出错原因
1.1 重现过程
1.1.1 创建测试表test,并通过show create table test取得表的创建语句,可见表名,列名都用引号包着。
mysql> create table test(
-> id int not null,
-> primary key(id)
-> );
Query OK, 0 rows affected (0.00 sec)
mysql> show create table test \G
*************************** 1. row ***************************
Table: test
Create Table: CREATE TABLE `test` (
`id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
1.1.2 drop掉test表,再复制刚才的创建语句,执行后,出现预期的语法错误。
mysql> drop table test;
Query OK, 0 rows affected (0.00 sec)
mysql> Create Table: CREATE TABLE `test` (
-> `id` int(11) NOT NULL,
-> PRIMARY KEY (`id`)
-> ) ENGINE=MyISAM DEFAULT CHARSET=latin1
-> ;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘: CREATE

1.2 原理
1.2.1 如果仔细看`test`与单引号的‘test‘外观上有点区别,那用字符串函ASCII()来验证一下(复制语句中`)。
从下面测试结果可知,`的ASCII码是96, 那查看码表后,才知`是"重音符",不是ASCII为39的单引号。
mysql> select ASCII(‘`‘);
+------------+
| ASCII(‘`‘) |
+------------+
| 96 |
+------------+
//查看单引号的ASCII码
mysql> select ASCII("‘");
+------------+
| ASCII("‘") |
+------------+
| 39 |
+------------+
说明:重音符在键盘第二排第一个键,发现的时候,我表示相当尴尬。
2 解决问题
2.1 利用Session设置参数set sql_quote_show_create=0;
2.1.1 sql_quote_show_create,有两个值(1,0),默认是1,表示表名和列名会用``包着的。
这个服务器参数只可以在session级别设置,不支持global设置的(不支持my.cnf设置)。
设置后,可见下面的没有重音符了。
mysql> set sql_quote_show_create=0;
Query OK, 0 rows affected (0.00 sec)
mysql> show create table test \G
*************************** 1. row ***************************
Table: test
Create Table: CREATE TABLE test (
id int(11) NOT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
2.2 使用pager来处理输出
mysql> pager tr -d ‘`‘
PAGER set to ‘tr -d ‘`‘‘
mysql> show create table test;
+-------+------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+------------------------------------------------------------------------------------------------------------+
| test | CREATE TABLE test (
id int(11) NOT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |

3, 命令行的使用:偷懒是一回事,如果在写shell, python等工具的时候,可能会根据show create table来处理一些事情,即“命令行处理”
3.1 用‘SET SQL_QUOTE_SHOW_CREATE=0
-bash-3.2$ mysql -uroot -e ‘SET SQL_QUOTE_SHOW_CREATE=0; use test; show create table test‘;
+-------+------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+------------------------------------------------------------------------------------------------------+
| test | CREATE TABLE test (
id int(11) NOT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
+-------+------------------------------------------------------------------------------------------------------+
3.2
-bash-3.2$ mysql -e ‘use test; show create table test \G‘ | tr -d ‘`‘;
*************************** 1. row ***************************
Table: test
Create Table: CREATE TABLE test (
id int(11) NOT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
3.3 也可以使用sed来解决
-bash-3.2$ mysql -e ‘use test; show create table test \G‘ | sed -e ‘s/`//g‘;
*************************** 1. row ***************************
Table: test
Create Table: CREATE TABLE test (
id int(11) NOT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1

时间: 2024-12-26 17:19:23

myql查询创建表语句SHOW CREATE TABLE table_name的相关文章

Oracle创建表语句(Create table)语法详解及示例

Oracle创建表语句(Create table)语法详解及示例   创建表(Create table)语法详解1. ORACLE常用的字段类型ORACLE常用的字段类型有VARCHAR2 (size) 可变长度的字符串, 必须规定长度CHAR(size) 固定长度的字符串, 不规定长度默认值为1NUMBER(p,s) 数字型p是位数总长度, s是小数的长度, 可存负数最长38位. 不够位时会四舍五入.DATE 日期和时间类型LOB 超长字符, 最大可达4GCLOB 超长文本字符串BLOB 超长

myql 查询树形表结果:说说、说说的述评、评论的回复

myql 查询树形表结果:说说.说说的评论.评论的回复 有三张表关联表: 用户的说说表(ixt_customer_note) 说说的评论表(ixt_customer_note_comment) 评论的回复表(ixt_customer_note_reply) 说说表保存的是用户发表的说说信息,评论表保存的是用户对说说发表的评论信息,回复表保存的是用户对评论及回复的回复 要求查询三张表返回结果为树形结构,如下: 发表说说:1003 发表说说:1002 发表评论:comment1002_1 发表评论:

sql:查询创建表的结构

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86

使用子查询创建表(oracle)

转自:https://blog.csdn.net/lxh123456789asd/article/details/81164321 语句: CREATE TABLE tablename[(column1,column2,column3.....] AS subquery; 例子: 1.create table tabletest as select * from emp where 1=2; 这句话后面的where条件为假,表示只复制表的结构,而不复制数据,当where表后面的条件为真的时候,表

【Mysql】生成Sqlserver创建表语句

sql: DROP VIEW IF EXISTS `V_TableToSqlserverText`; CREATE ALGORITHM = UNDEFINED DEFINER = `root`@`localhost` SQL SECURITY DEFINER VIEW `V_TableToSqlserverText` AS ( SELECT TABLE_NAME tablename,rownum,sqltext FROM( SELECT TABLE_NAME,0 rownum,sqltext F

DDL语句--创建表

表是数据库存储数据的基本单位.一个表包含若干字段和记录.表的操作包含创建新表,修改表,删除表.这些操作都是数据库管理中最基本,也是最重要的操作. 具体而言,关于表的相关操作如下: 1,创建表的方法 2,表的完整性约束条件 3,查看表结构的方法 4,修改表的方法 5,删除表的方法 上面罗列的这些都会一一的整理到.OK,现在我们开始第一篇,创建表. 创建表是指在已存在的数据库中创建新表,这是建立数据库最重要的一步,是进行其他表操作的基础.MySQL中创建表通过sql语句CREATE TABLE实现,

Oracle创建表空间和表

创建表空间和表ORACLE物理上是由磁盘上的以下几种文件:数据文件和控制文件和LOGFILE构成的oracle中的表就是一张存储数据的表.表空间是逻辑上的划分.方便管理的.数据表空间 (Tablespace)         存放数据总是需要空间, Oracle把一个数据库按功能划分若干空间来保存数据.当然数据存放在磁盘最终是以文件形式,所以一盘一个数据表空间包含一个以上的物理文件数据表         在仓库,我们可能有多间房子,每个房子又有多个货架,每架又有多层. 我们在数据库中存放数据,最

mysql 给axel数据创建表

create table point( id int primary key auto_increment ,point_x double, point_y double, boundry bool ); 一.sql语句 1.操作数据库 (1)创建数据库 CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [, create_specification] ...] create_specification:    [DEFA

SQLite使用教程6 创建表

http://www.runoob.com/sqlite/sqlite-create-table.html SQLite 创建表 SQLite 的 CREATE TABLE 语句用于在任何给定的数据库创建一个新表.创建基本表,涉及到命名表.定义列及每一列的数据类型. 语法 CREATE TABLE 语句的基本语法如下: CREATE TABLE database_name.table_name( column1 datatype PRIMARY KEY(one or more columns),