多选列表Select之双击删除与添加Demo

本文提供了一个使用HTML和JavaScript实现的简单示例,演示如何通过双击操作将下拉选项从一个选择框移动到另一个选择框,并展示了如何显示目标选择框的内容。
<html>

<head>

    <script>

        function removeItem(){

            var sltSrc=document.getElementById('sltSrc');

            var sltTarget=document.getElementById('sltTarget');

            for(var i=0;i<sltSrc.options.length;i++)

            {

                var tempOption=sltSrc.options[i];

                if(tempOption.selected){

                    sltSrc.removeChild(tempOption);

                    sltTarget.appendChild(tempOption);

                }    

            }

        }

        

        function addItem(){

            var sltSrc=document.getElementById('sltSrc');

            var sltTarget=document.getElementById('sltTarget');

            for(var i=0;i<sltTarget.options.length;i++)

            {

                var tempOption=sltTarget.options[i];

                if(tempOption.selected){

                    sltTarget.removeChild(tempOption);

                    sltSrc.appendChild(tempOption);

                }    

            }

        }

        function showSelectOptions(){

            var sltTarget=document.getElementById('sltTarget');

            var myhtml="";

            for(var i=0;i<sltTarget.options.length;i++)

            {

                myhtml +="Select Item" + i + ":  text= " + sltTarget.options[i].text + ", value=" + sltTarget.options[i].value + "<br/>";

            }

            document.getElementById("showInfo").innerHTML=myhtml;

        }

    </script>

</head>

<body>

    <select ondblclick="removeItem();" id="sltSrc" multiple="true" style="height:150px;width:150px">

        <option value="a">srcA</option>

        <option value="b">srcB</option>

        <option value="c">srcC</option>

    </select>

    <select ondblclick="addItem();" id="sltTarget"  multiple="true" style="height:150px;width:150px">

        <option value="a">targetA</option>

        <option value="b">targetB</option>

        <option value="c">targetC</option>

    </select>

    <div id="showInfo"></div>

    <input type="button" value="showSelectOptions"  onclick="showSelectOptions();"/>

</body>

</html>


 

在DBeaver的SQL编辑器中执行sql创建数据库student_db, 要求采用utf8mb4 字符集和utf8mb4_unicode_ci排序规则。择默认该数据库(use 命令),后续的实操练习都基于这个数据库。 1.2执行SHOW CREATE DATABASE student_db; 查看数据库的字符集。 创建数据表并指定存储引擎. 在DBeaver的SQL编辑器,自己编写sql创建表stu_test(假设有两列id和name,其中id为主键),指定引擎为InnoDB,完成后,在DBeaver左侧导航到表stu_test,双击查看表的引擎、字符集、排序规则、列等信息。 用户权限管理 3.1在DBeaver的SQL编辑器执行下面sql创建用户: CREATE USER 'stu_admin'@'localhost' IDENTIFIED BY '123456'; 3.2使用该用户和密码通过命令行登录,尝试执行use student_db,观察返回的信息。 3.3在DBeaver的SQL编辑器,使用sql语句授予对student_db所有表的全部权限给用户stu_admin@localhost 3.4在命令行界面再次尝试执行 use student_db ,观察返回信息在授权前后有何差异。 数据备份恢复 4.1备份数据: 在上面的MySQL命令行界面输入exit,退出登录。接着输入执行mysqldump语句备份数据,要求使用root用户,备份数据库student_db,备份到文件d:\student_db_backup.sql。备份完成后,查看备份文件里的内容是什么样的。 4.2删除数据库:在DBeaver左侧导航窗口,右击数据库 student_db,删除。 4.3恢复数据库:在命令行界面通过mysql命令执行sql语句导入备份文件d:\student_db_backup.sql。验证恢复情况:在DBeaver左侧导航,刷新,观察student_db 数据库是否恢复。 第二部分:数据表的设计数据类型特性 需求:要求给学生信息管理系统设计数据库表,保存学生的相关信息。至少包括学生id、姓名name、性别gender、生日,入学日期en_date、专业major、所在学院、所课程名称、课程的任课老师姓名、课程的上课时间等信息。 1、设计数据表并创建表 要求:1)构思需要哪些表,以符合数据库范式;2)为表的各个字段择合适的数据类型。 根据上面的设计,编写create table的sql语句,确认sql无误后执行创建表。 2、体会MySQL数据类型特性 2.1 整数类型范围测试 使用语句CREATE TABLE test_int_types ( id TINYINT, age SMALLINT, count INT,big_num BIGINT) 创建表,尝试插入记录 (128, 32768, 2147483648, 9223372036854775808),观察发生什么,为什么?修改上述值为各整数类型的边界值、超过边界值,继续观察结果。 2.2 浮点数精度问题体验 使用语句CREATE TABLE precision_demo(f_val FLOAT(10,6), d_val DECIMAL(10,6))建表,执行INSERT INTO precision_demo VALUES (0.0001234, 0.0001234);插入数据,再执行SELECT FORMAT(f_val, 15) AS float_with_more_decimals, FORMAT(d_val, 15) AS decimal_with_more_decimals FROM precision_demo; 观察两个数的精度差异。 2.3 模仿上述的方法,测试CHAR和VARCHAR的差异点。 A、两个字段分别是CHAR(10)和VARCHAR(10),当它们存储字符串‘Mysql’时,存储的实际长度分别是少? B、插入字符串'Hi '时(注意末尾有两个空格),它们的实际存储长度分别是少? 2.4 理解不同日期时间类型的特性 创建一个表,有三个字段,类型分别是DATE, DATETIME, TIMESTAMP,插入当前时间(now()函数),然后将数据select出来观察他们的差异。 2.5 ENUM类型约束体验(单) 创建一个表,其中一个字段为gender ENUM('Male', 'Female', 'Other'),插入一条gender='M' 的记录,观察结果。 再插入一条gender='male' 的记录,观察是否大小写敏感。 2.6 SET类型功能 自己设计一个表,包含一个SET类型的字段,插入数据,测试SET类型的值存储特性。 第三部分:表的创建修改,以及索引查询优化 1、创建/删除表(CREATE/DROP TABLE) 1.1备份第二部分创建的表的DDL,之后删除第二部分创建的表。 2.1 按如下要求修改DDL,修改完成后再次执行创建表。 a、为有关联的表加上外键约束;b、学生性别只能是男或女;c、重新检查表的各个字段的数据类型是否最优。 2、修改表结构(ALTER TABLE) 2.1模拟业务变更,对表进行一系列修改(必须通过sql语句),每次修改后都在DBeaver查看修改后的表的字段情况。 A、如果第二部分创建的学生表不是students,将其改名为students。 B、添加新列contact_phone (手机号),要求带描述“手机号” C、修改列的数据类型 (将专业字段扩大长度为150字符) D、重命名列 (将生日字段改为dob) E、删除生日字段(dob) F、为已存在的列(contact_phone)添加唯一约束(确保手机号唯一) 2.2执行上述sql之后,在DBeaver查看最终的建表语句(DDL)。 3、理解索引创建索引(CREATE INDEX) 使用sql语句为 students表上频繁查询的字段创建索引。 3.1为姓名字段创建普通索引(常用于搜索和模糊匹配)。 3.2为专业和性别创建联合复合索引(常用于条件组合查询) 4、查看删除索引(DROP INDEX) 使用sql语句,查看已创建的索引,并了解如何删除不需要的索引。 4.1 查看 students 表上的所有索引。 4.2 删除前面建立的名字的索引。 5、使用 EXPLAIN分析查询性能(重点) 1)根据自己设计的students表结构,自己准备10条测试数据(可以直接在图形化工具录入 或 使用insert语句插入),便于分析查询性能。 2)使用 EXPLAIN命令查看SQL语句(比如SELECT * FROM students WHERE name = 'mike')的执行计划,判断是否使用了索引,阅读 EXPLAIN结果,判断查询是否使用了索引。 3)在姓名name列创建索引,再执行EXPLAIN分析,阅读 EXPLAIN结果,判断查询是否使用了索引。 4)分析一个利用复合索引(专业和性别)的查询,阅读 EXPLAIN结果,判断查询是否使用了索引。 5)分析一个查询全部男生的sql语句,阅读 EXPLAIN结果,对比前面,判断查询是否使用了索引。
最新发布
10-01
第一部分:数据库管理数据安全 环境准备登录验证 [可]在Windows 平台下安装配置MySQL。 用命令行方式登录MySQL(打开cmd,切换到MySQL的bin目录,执行mysql -u root -p),登录后执行status,查看数据库状态信息。 用图形化工具(后续描述基于工具为DBeaver)登录MySQL,在SQL编辑器中执行show databases,查看输出目前有哪些数据库。 数据库创建、存储引擎、权限配置数据备份 创建数据库并设置字符集。 1.1在DBeaver的SQL编辑器中执行sql创建数据库student_db, 要求采用utf8mb4 字符集和utf8mb4_unicode_ci排序规则。择默认该数据库(use 命令),后续的实操练习都基于这个数据库。 1.2执行SHOW CREATE DATABASE student_db; 查看数据库的字符集。 创建数据表并指定存储引擎. 在DBeaver的SQL编辑器,自己编写sql创建表stu_test(假设有两列id和name,其中id为主键),指定引擎为InnoDB,完成后,在DBeaver左侧导航到表stu_test,双击查看表的引擎、字符集、排序规则、列等信息。 用户权限管理 3.1在DBeaver的SQL编辑器执行下面sql创建用户: CREATE USER 'stu_admin'@'localhost' IDENTIFIED BY '123456'; 3.2使用该用户和密码通过命令行登录,尝试执行use student_db,观察返回的信息。 3.3在DBeaver的SQL编辑器,使用sql语句授予对student_db所有表的全部权限给用户stu_admin@localhost 3.4在命令行界面再次尝试执行 use student_db ,观察返回信息在授权前后有何差异。 数据备份恢复 4.1备份数据: 在上面的MySQL命令行界面输入exit,退出登录。接着输入执行mysqldump语句备份数据,要求使用root用户,备份数据库student_db,备份到文件d:\student_db_backup.sql。备份完成后,查看备份文件里的内容是什么样的。 4.2删除数据库:在DBeaver左侧导航窗口,右击数据库 student_db,删除。 4.3恢复数据库:在命令行界面通过mysql命令执行sql语句导入备份文件d:\student_db_backup.sql。验证恢复情况:在DBeaver左侧导航,刷新,观察student_db 数据库是否恢复。 第二部分:数据表的设计数据类型特性 需求:要求给学生信息管理系统设计数据库表,保存学生的相关信息。至少包括学生id、姓名name、性别gender、生日,入学日期en_date、专业major、所在学院、所课程名称、课程的任课老师姓名、课程的上课时间等信息。 1、设计数据表并创建表 要求:1)构思需要哪些表,以符合数据库范式;2)为表的各个字段择合适的数据类型。 根据上面的设计,编写create table的sql语句,确认sql无误后执行创建表。 2、体会MySQL数据类型特性 2.1 整数类型范围测试 使用语句CREATE TABLE test_int_types ( id TINYINT, age SMALLINT, count INT,big_num BIGINT) 创建表,尝试插入记录 (128, 32768, 2147483648, 9223372036854775808),观察发生什么,为什么?修改上述值为各整数类型的边界值、超过边界值,继续观察结果。 2.2 浮点数精度问题体验 使用语句CREATE TABLE precision_demo(f_val FLOAT(10,6), d_val DECIMAL(10,6))建表,执行INSERT INTO precision_demo VALUES (0.0001234, 0.0001234);插入数据,再执行SELECT FORMAT(f_val, 15) AS float_with_more_decimals, FORMAT(d_val, 15) AS decimal_with_more_decimals FROM precision_demo; 观察两个数的精度差异。 2.3 模仿上述的方法,测试CHAR和VARCHAR的差异点。 A、两个字段分别是CHAR(10)和VARCHAR(10),当它们存储字符串‘Mysql’时,存储的实际长度分别是少? B、插入字符串'Hi '时(注意末尾有两个空格),它们的实际存储长度分别是少? 2.4 理解不同日期时间类型的特性 创建一个表,有三个字段,类型分别是DATE, DATETIME, TIMESTAMP,插入当前时间(now()函数),然后将数据select出来观察他们的差异。 2.5 ENUM类型约束体验(单) 创建一个表,其中一个字段为gender ENUM('Male', 'Female', 'Other'),插入一条gender='M' 的记录,观察结果。 再插入一条gender='male' 的记录,观察是否大小写敏感。 2.6 SET类型功能 自己设计一个表,包含一个SET类型的字段,插入数据,测试SET类型的值存储特性。 第三部分:表的创建修改,以及索引查询优化 1、创建/删除表(CREATE/DROP TABLE) 1.1备份第二部分创建的表的DDL,之后删除第二部分创建的表。 2.1 按如下要求修改DDL,修改完成后再次执行创建表。 a、为有关联的表加上外键约束;b、学生性别只能是男或女;c、重新检查表的各个字段的数据类型是否最优。 2、修改表结构(ALTER TABLE) 2.1模拟业务变更,对表进行一系列修改(必须通过sql语句),每次修改后都在DBeaver查看修改后的表的字段情况。 A、如果第二部分创建的学生表不是students,将其改名为students。 B、添加新列contact_phone (手机号),要求带描述“手机号” C、修改列的数据类型 (将专业字段扩大长度为150字符) D、重命名列 (将生日字段改为dob) E、删除生日字段(dob) F、为已存在的列(contact_phone)添加唯一约束(确保手机号唯一) 2.2执行上述sql之后,在DBeaver查看最终的建表语句(DDL)。 3、理解索引创建索引(CREATE INDEX) 使用sql语句为 students表上频繁查询的字段创建索引。 3.1为姓名字段创建普通索引(常用于搜索和模糊匹配)。 3.2为专业和性别创建联合复合索引(常用于条件组合查询) 4、查看删除索引(DROP INDEX) 使用sql语句,查看已创建的索引,并了解如何删除不需要的索引。 4.1 查看 students 表上的所有索引。 4.2 删除前面建立的名字的索引。 5、使用 EXPLAIN分析查询性能(重点) 1)根据自己设计的students表结构,自己准备10条测试数据(可以直接在图形化工具录入 或 使用insert语句插入),便于分析查询性能。 2)使用 EXPLAIN命令查看SQL语句(比如SELECT * FROM students WHERE name = 'mike')的执行计划,判断是否使用了索引,阅读 EXPLAIN结果,判断查询是否使用了索引。 3)在姓名name列创建索引,再执行EXPLAIN分析,阅读 EXPLAIN结果,判断查询是否使用了索引。 4)分析一个利用复合索引(专业和性别)的查询,阅读 EXPLAIN结果,判断查询是否使用了索引。 5)分析一个查询全部男生的sql语句,阅读 EXPLAIN结果,对比前面,判断查询是否使用了索引。
09-29
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值