mysql> create table students -> (
-> student_id int not null auto_increment, -> student_name char(50) not null,
-> student_sex char(1) not null default 0, -> student_age int not null,
-> student_major char(50) not null, -> student_contact char(50) null, -> primary key(student_id)) -> engine=innodb;
※在mysql中写sql语句回车后如何更改上一句话? 右键单击“mysql”的“dos窗口”上面的 蓝色横条
选择编辑->标记->然后按住鼠标左键选中你要修改的语句,再去右击蓝色横条选择编辑->复制就把这条你要修改的语句复制到剪贴板了然后去记事本里粘贴修改!
在记事本里写好命令复制,然后右键单点“mysql”的“dos窗口”上面的蓝色横条编辑->粘贴然后执行,当然这只是windows下的办法,要一次执行很多行代码的时候比较省事。
例6:向数据库mytest的表students中添加一列,并且命名为student_from,用于描述学生的生源地,要求不能是NULL,且该列位于原表列student_sex列之后。 Mysql>use table mytest.students
->add column student_from char(10) not null after student_sex;
※change子句:同时修改表中指定列的名称和数据类型。
例7:将数据库mytest中标students的student_from 列重命名为student_city,且数据类型为char(20),允许为NULL。
Mysql>alter table mytest.students
->change column student_from student_city char(20) null;
※Alter子句可以修改或者删除表中指定列的默认值。
例8:将数据库mytest中表students的student_sex列的默认值改为1(代表‘女’). Mysql>alter table mytest.students
->alter column student_sex set default 1;
※modify子句可以修改指定列的数据类型,但不会干涉它的列名。 与change的区别:change是可以将列名和数据类型都一起改了的。
例9:将数据库mytesr中的表students的students_name列的数据类型由char(50)更改为char(20),并且将此列设置为该表的第一列。 Mysql>alter table mytest.students
->modify column student_name char(20) first;
注意:add和modify都可以通过first或者after关键字来修改指定列在表中的位置。
例10:删除数据库mytest中students的student_contact列。 Mysql>alter table mytest.students
->drop column student_contct;
※rename子句可以为表重新赋予一个表名。
例11:使用rename子句,重新命名数据库mytest中表students的表名为university_students. Mysql>alter table mytest.students
->rename to mytest.university_students; 或者使用另一种格式:
例12:使用rename table 子句将数据库中mytest的university_students重新命名为students Mysql>rename table mytest.university_students to mytest.students;
※复制表的语法格式:
Create table <表名>[LIKE|AS<旧表名>]
LIKE:可以创建一个与旧表结构相同的表,其中列名、数据类型、空指定和索引都将复制到新表,但是表的内容不会复制,因此创建的是一个和原表结构相同的空表;
AS:如果在复制表结构的同时,复制表的内容,可以用AS子句来完成。使用AS子句可以复制表的内容,但是索引和完整性约束不会被复制。
例13:在数据库mytest中创建一份表students的拷贝students_copy。 Mysql>create table mytest.students_copy like mytest.students;
※删除表:可以使用drop table子句删除表(可以同时删除多个表) 例14:删除数据库mytest的表students_copy。 Mysql>drop table mytest.students_copy;
※显示表的名称:show tables 方法一:
Mysql>use mytest; Mysql>show tables;
这里的use引用了数据库以后也可以不用“;”直接就接下一个show tables; 方法二:
Mysql>show tables from mytests;
※显示表的结构:show columns(可以理解为每一列相当于属性,也即为表中的结构) 例16:显示数据库mytest中表students的结构。 Mysql>show columns from mytest.students;
注意:mysql支持用describe或者desc作为show columns from的一种快捷方式。 Mysql>desc mytest.students;
※关于空值(NULL):表的关键字不允许为空值,且任意两个空值不相等。
※关于标志(IDENTITY)属性:每个表中只有一个列设置为标志属性,并且该列只能是DECIMAL、INT、NUMERIC、SMALLINT、BIGINT、TINYINT数据类型。 ※关于列类型的隐含改变:
①长度小于4的VARCHAR类型会被改变为CHAR类型;
②当一张表中包含任何变长的列时,如VARCHAR、TEXT、BLOB类型的列,该表中所有大于3个字符的其他CHAR类型列会被改变为VARCHAR类型列; ③TIMESTAMP类型的列值显示尺寸必须是在偶数2~14范围内;
④不能在TIMESTAMP中存储空值NULL,所以当该列的值设置为NULL的时候,MySQL
会默认设置为它当前的日期时间。
课后总复习错题
5.查看当前正在使用的工作数据库名称的语句是(C)
A.SHOW DATABASES; B.SHOW TABLES; C.SELECT DATABASE(); D.SHOW SCHEMAS; 6.在MySQL数据库中,以下不会受字符集设置影响的数据类型有(B) A.CHAR B.INT C.VARCHAR D.TEXT (参见以上资料——列类型的隐含改变)
※INSERT语句的三种形式:
①INSERT?VALUES:向表中插入一行数据,也可以插入多行数据; ②INSERT?SET:指定插入行中每列的值,也可以指定部分列的值; ③INSERT?SELECT:向表中插入其他表的数据; 例1:使用INSERT?VALUES语句向数据库mytest的表students中插入这样一行完整数据:(1320,‘王丽’,‘1’,22,‘计算机专业’,‘138xxxxxx’)。 Mysql>set names gbk; /*改变字符集*/ mysql> insert into mytest.students
-> values ('王丽',1320,'1','138xxxxxx',22,'计算机专业'); 由于表的结构如下:
+---------------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra +---------------+----------+------+-----+---------+----------------+
| student_name | char(20) | YES | | NULL | | student_id | int(11) | NO | PRI | NULL | auto_increment | student_sex | char(1) | NO | | 1 | | student_contact | char(20) | YES | | NULL | | student_age | int(11) | NO | | NULL | | student_major | char(50) | NO | | NULL | +---------------+----------+------+-----+---------+----------------+ 应该按照显示的表结构输入数据。
注意:在MySQL不能输入中文或者现实不出中文的时候,可以使用SET NAMES GBK;语句来临时改变字符集。
例2:使用INSERT?VALUES语句向数据库mytest 表students中插入一行数据,这行数据只给出student_name、student_major和student_age列的信息,对应的值是“李明”、“数学专业”,“22”,其中student_id由系统自动生成,其他采用默认或者不指定值。 mysql> insert into mytest.students
-> values('李明',0,default,null,22,'数学专业');
※其中的0代表的是学号;由于AUTO_INCREMENT属性列的值是在表中其它列被赋值以后生成的,所以在对表中其它列做任何赋值操作时,对该AUTO_INCREMENT属性列的引用只会返回数字0.
还有一种方法:由于自动增长大的学号值可以不必列出,由系统自动生成,同时允许NULL值的列也可以不给出,因为系统允许其为空值,只需要输入提供的值即可。
Mysql>insert into mytest.students
->(student_name,student_sex,student_age,student_major) >values('李明',DEFAULT,22,'数学专业');
这种方法的好处是不必知道表结构,不会出现输入列与结构不对应的情况。
例3:使用INSERT?SET 语句来实现例2的数据插入需求。 Mysql>insert into mytest.students
->set student_name='李明',student_sex=default,student_age=22,student_major='数学专业'; 采用这种方式的好处:输入方式更为灵活。
例4:使用INSERT?VALUES一次向mytest表students中插入两行数据,数据分别为(‘张三’,‘1’,24,‘化学专业’)和(‘王五’,‘1’,23,‘数学专业’)。 mysql> insert into mytest.students
-> (student_name,student_sex,student_age,student_major) -> values('张三','1',24,'化学专业'),
-> ('王五','1',23,'数学专业');
例5:假设数据库mytest的表student中有一个拷贝备份表student_copy,现使用insert?select语句将student_copy中的数据合并到表students。 Mysql>insert into mytest.students
->(student_name,student_sex,student_age,student_major) ->select student_name,student_sex,student_age,student_major ->from mytest.sudents_copy;
※REPLACE语句的功能:插入的数据主键与已有数据的主键重复,则INSERT语句将无法插入此行。此时若是需要插入此行数据,则可以使用REPLACE语句来实现。则REPLACE的功能是替换主键重复的行数据。REPLACE的三种语法格式为:REPLACE?VALUES、REPLACE?SET、REPLACE?SELECT语句。 例6:使用INSERT 语句成功执行例2以后,数据库mytest表students会存在这样一条数据:('王丽',1320,'1','138xxxxxx',22,'计算机专业');现在向该表插入一条新数据:(‘李芳’,1320,‘1’,‘137xxxxxx’,26,‘会计专业’)。
如果直接插入,则程序会出现错误,原因是两条数据的主键都一样,都是1320。 所以,此程序应该为:
mysql> replace into mytest.students
-> values('李芳',1320,'1','137xxxxxx',26,'会计专业');
※使用DELETE语句从单个表中删除数据
DELETE FROM 表名 where子句/order by子句/limit 子句
Limit子句:用于告知服务器在控制命令被返回到客户端前删除行的最大值。
例7:使用DELETE 语句删除数据库mytest的表students中名字为‘王丽’的学生信息。 Mysql>delete from mytest.students where student_name='王丽';
例8:假设数据库中有三个表tbl1,tbl2,tbl3,它们均含有id列,现在要求删除表tbl1中id值等于tbl2的id值的所有行,以及表tbl2中id值等于tbl3的id值的所有行。
注意:弄清楚要删除的是哪个表。 Mysql>delete tbl1,tbl2 from tbl1,tb2l,tbl3
->where tbl1.id=tbl2.id and tbl2.id=tbl3.id;
※使用TRUNCATE删除表数据(清除表数据):使用TRUNCATE以后,表中的AUTO_INCREMENT计数器重新被置为该列的初始值。对于参与了索引和视图的表,不能使用TRUNCATE语句删除数据,而应该使用DELETE语句。
※事务日志:事务日志是一个数据库文件分开的文件,它存储对数据库进行的所有更改,并全部记录插入、更新、删除、提交、回退和数据库模式变化。 ※使用UPDATE语句修改单个表:
例9:使用UPDATE语句将数据库mytest的表students中姓名为“张三”的学生的联系方式更新为“139xxxxxx”。
mysql> update mytest.students
-> set student_city='139xxxxxx'
-> where student_name='张三';
例10:使用UPDATE语句将数据库mytest的表students中名为“李芳”的年龄修改为23,将专业修改为“物理专业”。 mysql> update mytest.students
-> set student_age=23 and student_major='物理专业'
-> where student_name='李芳';
例11:假设数据库中有两个表tbl1和tbl2,他们都有两个名为id和name列,其中id列为各自的主键,现在要求当表tbl1和tbl2中id 值相同时,将表tbl1中name的列的值修改为“李明”,将表tbl2中name列的值为改为“王伟”。 Mysql>update tbl1,tbl2
->set tbl1.name='李明' and tbl2.name='王伟' ->where tbl1.id=tbl2.id;
课后总复习错题
3/7:学生表student包含sname、sex、age三个属性列,其中age默认值为20,执行SQL语句INSERT INTO student(sex,sname,age) VALUES('M','Lili', );的结果是(A) A.执行成功,sname,sex,age的值分别为Lili,M,20 B.执行成功,sname,sex,age 的值分别为M,Lili,NULL C.执行成功,sname,sex,age的值分别为M,Lili,20 D.SQL语句不正确,执行失败。 解析:首先排除B,既然有默认值,那么执行出来的结果就不可能是NULL。有默认值的age可以在VALUES值代入的时候显示“default”,也可以直接不用理会,直接不显示地填充值(注意:不是NULL,NULL是真的表结构规定的时候允许使用NULL而且真的没有相应值代入的时候才去使用)
注意:以上加粗的办法是最可行的,在有些版本的MySQL中并不支持直接不显示默认值的方法,会有出错提醒。
8.在使用insert?into插入记录时,对于AUTO_INCREMENT列,若需要使其值自动增长,下面填充方式中错误的是(D)
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库计算机二级MySQL基本知识点(2)在线全文阅读。
相关推荐: