



  

<!DOCTYPE html>
<html
  lang="en"
  
  data-color-mode="auto" data-light-theme="light" data-dark-theme="dark"
  data-a11y-animated-images="system" data-a11y-link-underlines="true"
  
  >




  <head>
    <meta charset="utf-8">
  <link rel="dns-prefetch" href="https://github.githubassets.com">
  <link rel="dns-prefetch" href="https://avatars.githubusercontent.com">
  <link rel="dns-prefetch" href="https://github-cloud.s3.amazonaws.com">
  <link rel="dns-prefetch" href="https://user-images.githubusercontent.com/">
  <link rel="preconnect" href="https://github.githubassets.com" crossorigin>
  <link rel="preconnect" href="https://avatars.githubusercontent.com">

<script type="importmap">{"imports":{"react":"https://github.githubassets.com/assets/react-e27d1b3e03961e68.js","react-dom":"https://github.githubassets.com/assets/react-dom-e5fd46a22d5c4058.js","react-dom/client":"https://github.githubassets.com/assets/react-dom-client-1b4a3ee065998cea.js","react-is":"https://github.githubassets.com/assets/react-is-e0b593954b4706d8.js","react-reconciler":"https://github.githubassets.com/assets/react-reconciler-8e99e505c4429605.js","react/compiler-runtime":"https://github.githubassets.com/assets/react-compiler-runtime-4610bd6d3de9c049.js","react/jsx-dev-runtime":"https://github.githubassets.com/assets/react-jsx-dev-runtime-ea55d68667d559e5.js","react/jsx-runtime":"https://github.githubassets.com/assets/react-jsx-runtime-4915cb0f5b3aff04.js","scheduler":"https://github.githubassets.com/assets/scheduler-58b860b049ca307c.js"}}</script>
<meta name="react-profiling" content="0" data-turbo-transient="true" />
<meta name="react-import-map" content="react,react-dom,react-dom/client,react-dom/profiling,react-is,react-reconciler,react/compiler-runtime,react/jsx-dev-runtime,react/jsx-runtime,scheduler@777f63f87cd0" data-turbo-track="reload" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-e27d1b3e03961e68.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-compiler-runtime-4610bd6d3de9c049.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/scheduler-58b860b049ca307c.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-dom-e5fd46a22d5c4058.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-dom-client-1b4a3ee065998cea.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-is-e0b593954b4706d8.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-jsx-runtime-4915cb0f5b3aff04.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-reconciler-8e99e505c4429605.js" />

  


  <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/light-99f877e9ddfc0e51.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/light_high_contrast-48fdd0811afbab3c.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/dark-79ad2ace604703b3.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/dark_high_contrast-24484a076f02295f.css" /><link data-color-theme="light" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light-99f877e9ddfc0e51.css" /><link data-color-theme="light_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_high_contrast-48fdd0811afbab3c.css" /><link data-color-theme="light_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_colorblind-f4bf1142976e4bbf.css" /><link data-color-theme="light_colorblind_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_colorblind_high_contrast-f661b49995ba0bd8.css" /><link data-color-theme="light_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_tritanopia-0b38d22346321c92.css" /><link data-color-theme="light_tritanopia_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_tritanopia_high_contrast-f1c62c9e70259b9f.css" /><link data-color-theme="dark" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark-79ad2ace604703b3.css" /><link data-color-theme="dark_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_high_contrast-24484a076f02295f.css" /><link data-color-theme="dark_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_colorblind-f50cacf0a86b9929.css" /><link data-color-theme="dark_colorblind_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_colorblind_high_contrast-e61d4f4ca17852c2.css" /><link data-color-theme="dark_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_tritanopia-39c10993d5603fac.css" /><link data-color-theme="dark_tritanopia_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_tritanopia_high_contrast-73236c840c0c7d90.css" /><link data-color-theme="dark_dimmed" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_dimmed-0de76f07cc035b10.css" /><link data-color-theme="dark_dimmed_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_dimmed_high_contrast-fd1500c8744e40d6.css" />

  <style type="text/css">
    :root {
      --tab-size-preference: 4;
    }

    pre, code {
      tab-size: var(--tab-size-preference);
    }
  </style>

    <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-primitives-ed9ca172356fd545.css" />
    <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-1d2c7f7b52a6068b.css" />
    <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/global-54ba76e934a49d7c.css" />
    <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/github-456bd5deb85c7ecd.css" />
  <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/repository-11ee8a031c040c1a.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/code-2d56bdb0166c0238.css" />

  

  <script type="application/json" id="client-env">{"locale":"en","featureFlags":["actions_enable_background_steps","actions_new_hosted_runner_image_select_sizes_and_versions","activity_diff_file_tree","activity_repos_file_tree","activity_repos_overview_header","activity_repos_overview_sidebar","agent_author_search_expansion","agent_author_search_expansion_ui_pulls","alternate_user_config_repo","async_conversion_coverage_enabled","billing_billable_licenses_cost_center_bucket_fix","billing_budget_expiration","billing_cost_center_list_assigned_resources","billing_discount_threshold_notification","code_quality_enablement_banner_targeting","code_quality_remove_preview","code_view_raf_sticky_lines","codespaces_prebuild_region_target_update","coding_agent_third_party_model_ui","copilot_agent_snippy","copilot_api_agentic_issue_marshal_yaml","copilot_automation_repo_mcp_servers","copilot_automations_pagination","copilot_chat_auto_mode_v2","copilot_chat_clear_model_selection_for_default_change","copilot_chat_header_reorder","copilot_chat_max_upsell","copilot_chat_minimize_contextual","copilot_chat_models_browser_cache","copilot_chat_vision_dotcom_chat_ga_gate","copilot_css_textarea_autosize","copilot_custom_copilots","copilot_custom_copilots_feature_preview","copilot_duplicate_thread","copilot_extensions_removal_on_marketplace","copilot_fix_failed_workflows_all_skus","copilot_hide_hovercard","copilot_immersive_embedded_header_button","copilot_immersive_file_preview_keep_mounted","copilot_immersive_suggestion_pills","copilot_immersive_task_hyperlinking","copilot_immersive_task_within_chat_thread","copilot_mc_cli_resume_any_users_task","copilot_mission_control_agent_merge_fix_ci","copilot_mission_control_agent_merge_resolve_conflicts","copilot_mission_control_agents_repository_enablement","copilot_mission_control_early_stop","copilot_mission_control_environment_list_icons","copilot_mission_control_managed_sandbox_environments","copilot_mission_control_needs_attention","copilot_mission_control_reasoning_effort","copilot_mission_control_repo_hovercards","copilot_mission_control_sandbox_client_side_clone","copilot_mission_control_sandbox_remote_bypass","copilot_mission_control_session_filters","copilot_mission_control_task_alive_updates","copilot_mission_control_task_sharing","copilot_org_policy_page_focus_mode","copilot_pr_chat_enhancements","copilot_prominent_upgrade_button","copilot_resource_panel","copilot_share_active_subthread","copilot_spaces_ga","copilot_spaces_individual_policies_ga","copilot_spark_handle_nil_friendly_name","copilot_swe_agent_authorization_status_ui","copilot_swe_agent_automation_resource_scoped_writes","copilot_swe_agent_hide_model_picker_if_only_auto","copilot_swe_agent_issue_comment_trigger","copilot_swe_agent_pr_comment_model_picker","copilot_swe_agent_pull_request_comment_trigger","copilot_swe_agent_pull_request_merged_trigger","copilot_swe_agent_pull_request_opened_trigger","copilot_swe_agent_pull_request_synchronize_trigger","copilot_swe_agent_use_subagents","copilot_task_api_github_rest_style","copilot_task_scoped_alive_channel","copilot_token_based_billing","copilot_unconfigured_is_inherited","copilot_user_can_upgrade_plan_field","copilot_workbench_sunset","copilot_workbench_sunset_redirect","copilot_workbench_ubb","dashboard_indexeddb_caching","dashboard_lists_max_age_filter","dashboard_universe_2025_feedback_dialog","glc_code_quality_repo_settings_workflow_config","hide_github_models_ui","hyperspace_2025_logged_out_batch_1","hyperspace_2025_logged_out_batch_2","hyperspace_2025_logged_out_batch_3","in_product_messaging_datadog_monitoring","ipm_global_transactional_message_copilot","ipm_global_transactional_message_issues","ipm_global_transactional_message_prs","ipm_global_transactional_message_repos","ipm_global_transactional_message_spaces","ipm_ubb_individual_budget_banner","issue_fields_multi_select","issue_inline_avatars","issue_pinned_views","issue_pinned_views_optimistic_updates","issue_relative_time_micro","issues_dashboard_sso_structured_errors","issues_expanded_file_types","issues_hide_closed_sub_issues","issues_lazy_load_comment_box_suggestions","issues_optimistic_linked_branch_create","issues_react_chrome_container_query_fix","labels_archiving","labels_archiving_info","landing_pages_ninetailed","lifecycle_label_name_updates","marketing_cookie_consent_banner","marketing_pages_search_explore_provider","memex_default_issue_create_repository","memex_lazy_hydrate_agent_tasks","memex_live_update_hovercard","memex_mwl_filter_field_delimiter","memex_remove_deprecated_type_issue","merge_queue_restricted_pushers_warning","merge_status_checks_refetch_dedupe","merge_status_header_feedback","oauth_authorize_clickjacking_protection","octocaptcha_origin_optimization","primer_react_css_anchor_positioning","primer_react_merged_forwarded_refs","prs_copilot_app_open_action","prs_css_anchor_positioning","pull_request_commit_checks_dialog","pull_request_copilot_attribution_header","pull_request_overview_panel_edit_description","pull_request_persister","pull_request_stacks_feedback_dialog","pull_request_virtualization_image_estimate","pull_request_virtualization_scroll_compensation","pull_request_virtualization_scroll_intent","quick_search_lazy_suggestions","react_blob_isolate_code_lines","react_blob_ssr_content_visibility","react_data_router_tanstack_allowed","react_query_props_with_key","react_sandbox_future_tanstack","repo_app_turbo","repo_issues_sidebar_layout","repo_pulls_dashboard_persistence","repos_contributors_limited_default_range","review_involves_filter","rule_ignored_file_paths","rulesets_actor_list_editor","sample_network_conn_type","security_center_artifact_filters_popover","see_who_reacted","semantic_similarity_duplicate_issue_detection","session_logs_ungroup_reasoning_text","set_sha256_on_repo_creation_form","site_banner_desktop_copilot_app","site_ghca_pixel_mona","site_github_app_ga_page","site_github_app_ga_page_highlight","site_github_app_mobile_native_share","site_global_banner_dev_days_attendee","site_global_banner_learn_copilot_sdk","site_global_nav_spark_models_removed","spark_prompt_secret_scanning","spark_server_connection_status","suggest_custom_property_values_copilot","suppress_automated_browser_vitals","swp_forms_disable_octocaptcha","thread_resolution_reason","ui_service_compute_proxy_control","ui_service_referrer_metrics","ui_service_staleness_detection","update_issue_suggestions","user_code_paste_ux","viewscreen_sandbox","warn_inaccessible_attachments","webp_support","workbench_store_readonly","workstream_plugin_bootstrap"],"githubDomain":"https://github.com","copilotApiOverrideUrl":"https://api.githubcopilot.com","cmcApiUrl":"https://api.github.com/cmc_internal/api"}</script>
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/high-contrast-cookie-e3d808ee18eb9784.js"></script>
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/wp-runtime-4c357e12164e8472.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/app-foundation-74e9766bd696d26a.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/app-runtime-eed8df9c2267c378.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/fetch-utilities-5305162aa9984914.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ser-cd1b421ad0ad7ed5.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/environment-72de6243d28a4f30.js" defer="defer"></script>
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/app-runtime.94e436d05b4d028c.module.css" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/catalyst-86a8f5de995615f8.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/selector-observer-e88088f989b27670.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/relative-time-element-7cdf4e0db98b997c.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/by-6b3c07383371bf58.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ja9-36f036c13c2e3a4c.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/kw-866fd9513ae95106.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/r1-b075aab3204f32f9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/jz5-7c5d1669717041f8.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/hj-5126390ff433704d.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/j05-dce4d588268f0f7e.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/github-elements-68de44015f512528.js" defer="defer"></script>
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/element-registry-d55dde1e3f97f4a6.js" defer="defer"></script>
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/runtime-helpers-f3f5d71440009c48.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/aria-live-76b18916d0c8ec4d.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/hotkey-5109c77d7ac61078.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-core-fbb00aaa3ab9abdf.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/04n-51c49ba758739f13.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ur-024971cb63acad59.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/4t-364e19c63d726e9a.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/6ny-c969fbae697a356f.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/yhq-3a209035a30b1a09.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/z1v-da5b33b877bfa358.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/wo-09f85d22a6c8931b.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/9y-81cfe57dc9040f3e.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/j0-41a4cf04cbd99503.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/0p-81491ed0d9d666e2.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/behaviors-f6d15f2ff25cec93.js" defer="defer"></script>
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/react-core.5858534b1c27f133.module.css" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/code-menu-487b2b426fdc6368.js" defer="defer"></script>
  
  <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/primer-react-12ebdc24dcff1ecc.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ncx-9a860680a5f230b9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/j6-363f0ebf4f62f310.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/t7l-bf6f21d7e7a43c35.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/fe-7576d9b281e2106a.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/wsr-5fd3071e5a9061ab.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/0n-ecadb2ffe6b01ba2.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/xv-51cb34754bda73a9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/n4u-6317ce1c31aed1db.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/j8s-d90ce3a169b741ed.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/la-de176c4ee471f2b3.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/eag-d9eea130fa716df9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/y2-87df441f1bc5a264.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/kcz-607e36c8a3751cf0.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/x4-65dba777efd828f3.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/gzu-1a09248f686325f6.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/on-95be29ba1ef725d9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/bi0-e2f78de823e39ca9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/b1-1dbc371cef78c3c1.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/0l5-c4edb8ab48c5846d.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/c2z-c92998400310b94b.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/f9-038758dcbfe08dab.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/0k-b7df0a74912a42bf.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/sp-2bbb73a69162e23b.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/og-93ae8b358505d372.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/b9-69d9b60a1b1fcd59.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ec-ec74cb1fa6c31a3f.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/du-bbe0f39cd2abe9a0.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ql0-6accb9e40c25a6a5.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/20-0a2e46387735f1f4.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/dsj-cb1e4ddbce4f007b.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/wp-9f5235d335ab624b.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ko6-9e80f7ac359e3c43.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/uw-8c275f7ac25b7cf6.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/bsb-4f4ac8c20da73fac.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/w5-13e3a7548bb20af9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/fm-53dde3bf12947bbf.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/z-45022d3da7b8817e.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/h0-010921512138e12f.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/5p-ae5db0820116fb43.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/8vq-b2af216e992e11ef.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/g5-b399ce875f8bd326.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/xc-f5d51b571cd317cb.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/arw-51e8918a1b75a80f.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/code-view-4f47cb881d0c32f1.js" defer="defer"></script>
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.9d59d1018a52a53c.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/ql0.bd9e6b542f167fd8.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/z.4527ed443a11f500.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/xc.13e027137438fd9f.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/code-view.b5b4790b9c182cf2.module.css" />

  <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/hu-1fc0b2a167afc025.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/fbr-9cd34ba01ef26edb.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/notifications-subscriptions-menu-114f831dbb689346.js" defer="defer"></script>
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.9d59d1018a52a53c.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/notifications-subscriptions-menu.9c76a830135c04bc.module.css" />


  <title>backend-tutorial/java-tutorial/ch24_MySQL_basic.md at main · timerring/backend-tutorial · GitHub</title>



  <meta name="route-pattern" content="/:user_id/:repository/blob/*name(/*path)" data-turbo-transient>
  <meta name="route-controller" content="blob" data-turbo-transient>
  <meta name="route-action" content="show" data-turbo-transient>
  <meta name="fetch-nonce" content="v2:928469c3-ef6c-04ee-e3ba-b24dbe2ac81c">

    
  <meta name="current-catalog-service-hash" content="f3abb0cc802f3d7b95fc8762b94bdcb13bf39634c40c357301c4aa1d67a256fb">


  <meta name="request-id" content="D15C:1F816C:CF33FD5:C22AE65:6AAC215C" data-pjax-transient="true"/><meta name="html-safe-nonce" content="d574d5b880d22250eff6796e6cf7213b8825897ddb92bf9f065d84ad48347397" data-pjax-transient="true"/><meta name="visitor-payload" content="eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJEMTVDOjFGODE2QzpDRjMzRkQ1OkMyMkFFNjU6NkFBQzIxNUMiLCJ2aXNpdG9yX2lkIjoiMjkyMzc0MDc0MDE5NTE5NzI3NiIsInJlZ2lvbl9lZGdlIjoiZnJhIiwicmVnaW9uX3JlbmRlciI6ImZyYSJ9" data-pjax-transient="true"/><meta name="visitor-hmac" content="0f98181544b015372ac2538c56487e011cefec5df2d9e0ea2140e94683e082df" data-pjax-transient="true"/>


    <meta name="hovercard-subject-tag" content="repository:625897036" data-turbo-transient>


  <meta name="github-keyboard-shortcuts" content="repository,source-code,file-tree,copilot" data-turbo-transient="true" />
  

  <meta name="selected-link" value="repo_source" data-turbo-transient>
  <link rel="assets" href="https://github.githubassets.com/">

    <meta name="google-site-verification" content="Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I">

<meta name="octolytics-url" content="https://collector.github.com/github/collect" />





  <meta name="analytics-location" content="/&lt;user-name&gt;/&lt;repo-name&gt;/blob/show" data-turbo-transient="true" />

  




    <meta name="user-login" content="">

  

    <meta name="viewport" content="width=device-width">

    

      <meta name="description" content="韩顺平Java零基础markdown整理（A detailed tutorial of java from 0 to 1） - backend-tutorial/java-tutorial/ch24_MySQL_basic.md at main · timerring/backend-tutorial">

      <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub">

    <link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub">
    <meta property="fb:app_id" content="1401488693436528">
    <meta name="apple-itunes-app" content="app-id=1477376905, app-argument=https://github.com/timerring/backend-tutorial/blob/main/java-tutorial/ch24_MySQL_basic.md" />

      <meta name="twitter:image" content="https://opengraph.githubassets.com/6847261192dd617be17dfb3e31c9d2f044a1dd247f4adcf4e7b617ba0072117c/timerring/backend-tutorial" /><meta name="twitter:site" content="@github" /><meta name="twitter:card" content="summary_large_image" /><meta name="twitter:title" content="backend-tutorial/java-tutorial/ch24_MySQL_basic.md at main · timerring/backend-tutorial" /><meta name="twitter:description" content="韩顺平Java零基础markdown整理（A detailed tutorial of java from 0 to 1） - timerring/backend-tutorial" />
  <meta property="og:image" content="https://opengraph.githubassets.com/6847261192dd617be17dfb3e31c9d2f044a1dd247f4adcf4e7b617ba0072117c/timerring/backend-tutorial" /><meta property="og:image:alt" content="韩顺平Java零基础markdown整理（A detailed tutorial of java from 0 to 1） - timerring/backend-tutorial" /><meta property="og:image:width" content="1200" /><meta property="og:image:height" content="600" /><meta property="og:site_name" content="GitHub" /><meta property="og:type" content="object" /><meta property="og:title" content="backend-tutorial/java-tutorial/ch24_MySQL_basic.md at main · timerring/backend-tutorial" /><meta property="og:url" content="https://github.com/timerring/backend-tutorial/blob/main/java-tutorial/ch24_MySQL_basic.md" /><meta property="og:description" content="韩顺平Java零基础markdown整理（A detailed tutorial of java from 0 to 1） - timerring/backend-tutorial" />
  




      <meta name="hostname" content="github.com">



        <meta name="expected-hostname" content="github.com">


  <meta http-equiv="x-pjax-version" content="da7ef75a226829531c2fb7fe8ee51e3f223a3bbb4a3119c40cf599d9b7a6cb07" data-turbo-track="reload">
  <meta http-equiv="x-pjax-csp-version" content="0c5c6e5334a905d8f9521e09eadcffba484d422e0d262e07ff922e6bc18b2ac6" data-turbo-track="reload">
  <meta http-equiv="x-pjax-css-version" content="ec4c7b86d7b57240253150b827ea48b04e08d8760dc6553d2a04f62000f3fe0c" data-turbo-track="reload">
  <meta http-equiv="x-pjax-js-version" content="18d8f8e1890b365bfd781b3fd61b41ae0122a300587b576b95d2688d814fdd37" data-turbo-track="reload">

  <meta name="turbo-cache-control" content="no-preview" data-turbo-transient="">

      <meta name="turbo-cache-control" content="no-cache" data-turbo-transient>

    <meta data-hydrostats="publish">

  <meta name="go-import" content="github.com/timerring/backend-tutorial git https://github.com/timerring/backend-tutorial.git">

  <meta name="octolytics-dimension-user_id" content="89397553" /><meta name="octolytics-dimension-user_login" content="timerring" /><meta name="octolytics-dimension-repository_id" content="625897036" /><meta name="octolytics-dimension-repository_nwo" content="timerring/backend-tutorial" /><meta name="octolytics-dimension-repository_public" content="true" /><meta name="octolytics-dimension-repository_is_fork" content="false" /><meta name="octolytics-dimension-repository_network_root_id" content="625897036" /><meta name="octolytics-dimension-repository_network_root_nwo" content="timerring/backend-tutorial" />
  



    

    <meta name="turbo-body-classes" content="logged-out env-production page-responsive">
  <meta name="disable-turbo" content="false">


  <meta name="browser-stats-url" content="https://api.github.com/_private/browser/stats">


  <meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors">

  <meta name="release" content="cc8e0f3a41b66dcb1aff2f5c1920b7e595b7c413" data-turbo-track="reload">
  <meta name="ui-target" content="full">

  <link rel="mask-icon" href="https://github.githubassets.com/assets/pinned-octocat-093da3e6fa40.svg" color="#000000">
  <link rel="alternate icon" class="js-site-favicon" type="image/png" href="https://github.githubassets.com/favicons/favicon.png">
  <link rel="icon" class="js-site-favicon" type="image/svg+xml" href="https://github.githubassets.com/favicons/favicon.svg" data-base-href="https://github.githubassets.com/favicons/favicon">

<meta name="theme-color" content="#1e2327">
<meta name="color-scheme" content="light dark" />


  <link rel="manifest" href="/manifest.json" crossOrigin="use-credentials">

  </head>

  <body class="logged-out env-production page-responsive" style="word-wrap: break-word;" >
    <div data-turbo-body class="logged-out env-production page-responsive" style="word-wrap: break-word;" >
      <div id="__primerPortalRoot__" style="z-index: 1000; position: absolute; width: 100%;" data-turbo-permanent></div>
      

    <div class="position-relative header-wrapper js-header-wrapper ">
      <a href="#start-of-content" data-skip-target-assigned="false" class="px-2 tmp-py-4 color-bg-accent-emphasis color-fg-on-emphasis show-on-focus js-skip-to-content">Skip to content</a>

      <span data-view-component="true" class="progress-pjax-loader Progress position-fixed width-full">
    <span style="width: 0%;" data-view-component="true" class="Progress-item progress-pjax-loader-bar left-0 top-0 color-bg-accent-emphasis"></span>
</span>      
      <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/l7j-2ddd8b435dadae28.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/keyboard-shortcuts-dialog-c7194395e20641cf.js" fetchpriority="low" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.9d59d1018a52a53c.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/keyboard-shortcuts-dialog.ca35434433531b5d.module.css" />

<react-partial
  partial-name="keyboard-shortcuts-dialog"
  data-ssr="false"
  data-attempted-ssr="false"
  data-react-profiling="false"
>
  
  <script type="application/json" data-target="react-partial.embeddedData">{"props":{"docsUrl":"https://docs.github.com/get-started/accessibility/keyboard-shortcuts"}}</script>
  <div data-target="react-partial.reactRoot"></div>
</react-partial>





      

          
          

                <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/2l-8671acba87bc0dcb.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/i26-f2ae65b837c90ae7.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/fz5-23f28c0f388769c9.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/lht-26506ea833dda5be.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/p1-76a75a6081059b19.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/3d8-bbc4e3ce35fac150.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/tua-c4ca62c5e0e0318e.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/4s-c22d880230690e1f.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/marketing-header-95d9703e9355d6e0.js" fetchpriority="low" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.9d59d1018a52a53c.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-brand-css.6a01c236ff527e7e.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/4s.e3d02f110161be52.module.css" />

<react-partial
  partial-name="marketing-header"
  data-ssr="true"
  data-attempted-ssr="true"
  data-react-profiling="false"
>
  
  <script type="application/json" data-target="react-partial.embeddedData">{"props":{"color_mode":"dark","logged_in":false,"marketing_page":false,"home_path":"/","login_path":"/login?return_to=https%3A%2F%2Fgithub.com%2Ftimerring%2Fbackend-tutorial%2Fblob%2Fmain%2Fjava-tutorial%2Fch24_MySQL_basic.md","signup_path":"/signup?ref_cta=Sign+up\u0026ref_loc=header+logged+out\u0026ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fblob%2Fshow\u0026source=header-repo\u0026source_repo=timerring%2Fbackend-tutorial","signup_enabled":true,"is_signup_controller":false,"show_search_and_nav":true,"hide_search":false,"private_mode_enabled":false,"should_use_dotcom_links":true,"auth_hydro_click":"{\"event_type\":\"authentication.click\",\"payload\":{\"location_in_page\":\"site header menu\",\"repository_id\":null,\"auth_type\":\"SIGN_UP\",\"originating_url\":\"https://github.com/timerring/backend-tutorial/blob/main/java-tutorial/ch24_MySQL_basic.md\",\"user_id\":null}}","auth_hydro_click_hmac":"2cbce157594733030dcae282e0218fcde7830f12f4d5acb2811c94206e9be403","overlay":false,"fixed":false}}</script>
  <div data-target="react-partial.reactRoot"><div data-color-mode="dark" data-light-theme="light" data-dark-theme="dark"><header class="MarketingHeader-module__root__Tk7n3 HeaderMktg header-logged-out" role="banner" data-marketing-header="true" data-color-mode="dark" data-light-theme="light" data-dark-theme="dark" data-is-top="true"><h2 class="MarketingHeader-module__visuallyHidden__sqKsl">Navigation Menu</h2><button type="button" class="MarketingHeader-module__backdrop__sw4RU" aria-label="Close navigation menu"></button><div class="MarketingHeader-module__bar__mBSyE"><div class="MarketingHeader-module__topRow__yeury"><div class="MarketingHeader-module__toggleSlot__hDxbh"><button type="button" class="HeaderMenuToggle-module__toggle__i8EiC" aria-label="Toggle navigation" aria-expanded="false"><span class="HeaderMenuToggle-module__toggleBar__jVN0H"></span><span class="HeaderMenuToggle-module__toggleBar__jVN0H"></span><span class="HeaderMenuToggle-module__toggleBar__jVN0H"></span></button></div><a href="/" aria-label="Homepage" class="HeaderLogo-module__logo__UFyHI" data-analytics-event="{&quot;action&quot;:&quot;homepage&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;logo&quot;,&quot;location&quot;:&quot;header&quot;,&quot;label&quot;:&quot;homepage_link_logo_header&quot;}"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 24 24" width="32" height="32" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943"></path></svg></a><div class="AuthCTAs-module__mobileActions__NNzeV"><a class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw AuthCTAs-module__cta__WpwQq" href="/login?return_to=https%3A%2F%2Fgithub.com%2Ftimerring%2Fbackend-tutorial%2Fblob%2Fmain%2Fjava-tutorial%2Fch24_MySQL_basic.md" data-analytics-event="{&quot;action&quot;:&quot;sign_in&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;auth_cta&quot;,&quot;location&quot;:&quot;header&quot;,&quot;label&quot;:&quot;sign_in_link_auth_cta_header&quot;}" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/timerring/backend-tutorial/blob/main/java-tutorial/ch24_MySQL_basic.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="2cbce157594733030dcae282e0218fcde7830f12f4d5acb2811c94206e9be403"><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH">Sign in</span></span></a><button class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw HeaderAppearanceSettings-module__trigger__hUheK" type="button" aria-haspopup="dialog" aria-labelledby="_R_3dd_"><span class="Primer_Brand__Button-module__Button__leading-visual___jjtTe" data-testid="Button-leading-visual"><svg data-component="Octicon" focusable="false" aria-hidden="true" class="octicon octicon-sliders Primer_Brand__Button-module__Button__icon-visual____qybb" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M15 2.75a.75.75 0 0 1-.75.75h-4a.75.75 0 0 1 0-1.5h4a.75.75 0 0 1 .75.75Zm-8.5.75v1.25a.75.75 0 0 0 1.5 0v-4a.75.75 0 0 0-1.5 0V2H1.75a.75.75 0 0 0 0 1.5H6.5Zm1.25 5.25a.75.75 0 0 0 0-1.5h-6a.75.75 0 0 0 0 1.5h6ZM15 8a.75.75 0 0 1-.75.75H11.5V10a.75.75 0 1 1-1.5 0V6a.75.75 0 0 1 1.5 0v1.25h2.75A.75.75 0 0 1 15 8Zm-9 5.25v-2a.75.75 0 0 0-1.5 0v1.25H1.75a.75.75 0 0 0 0 1.5H4.5v1.25a.75.75 0 0 0 1.5 0v-2Zm9 0a.75.75 0 0 1-.75.75h-6a.75.75 0 0 1 0-1.5h6a.75.75 0 0 1 .75.75Z"></path></svg></span><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH"></span></span></button><div class="Primer_Brand__Tooltip-module__Tooltip___0Eipx" data-direction="s" aria-hidden="true" id="_R_3dd_">Appearance settings</div></div></div><div class="MarketingHeader-module__menu__GIy3y"><div class="MarketingHeader-module__menuWrapper__owstH"><nav class="MarketingNavigation-module__nav__W0KYY" aria-label="Global"><ul class="MarketingNavigation-module__list__tFbMb"><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_nd_">Platform<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_nd_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5knd_">AI CODE CREATION</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5knd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/copilot" data-analytics-event="{&quot;action&quot;:&quot;github_copilot&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_copilot_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copilot NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.998 15.035c-4.562 0-7.873-2.914-7.998-3.749V9.338c.085-.628.677-1.686 1.588-2.065.013-.07.024-.143.036-.218.029-.183.06-.384.126-.612-.201-.508-.254-1.084-.254-1.656 0-.87.128-1.769.693-2.484.579-.733 1.494-1.124 2.724-1.261 1.206-.134 2.262.034 2.944.765.05.053.096.108.139.165.044-.057.094-.112.143-.165.682-.731 1.738-.899 2.944-.765 1.23.137 2.145.528 2.724 1.261.566.715.693 1.614.693 2.484 0 .572-.053 1.148-.254 1.656.066.228.098.429.126.612.012.076.024.148.037.218.924.385 1.522 1.471 1.591 2.095v1.872c0 .766-3.351 3.795-8.002 3.795Zm0-1.485c2.28 0 4.584-1.11 5.002-1.433V7.862l-.023-.116c-.49.21-1.075.291-1.727.291-1.146 0-2.059-.327-2.71-.991A3.222 3.222 0 0 1 8 6.303a3.24 3.24 0 0 1-.544.743c-.65.664-1.563.991-2.71.991-.652 0-1.236-.081-1.727-.291l-.023.116v4.255c.419.323 2.722 1.433 5.002 1.433ZM6.762 2.83c-.193-.206-.637-.413-1.682-.297-1.019.113-1.479.404-1.713.7-.247.312-.369.789-.369 1.554 0 .793.129 1.171.308 1.371.162.181.519.379 1.442.379.853 0 1.339-.235 1.638-.54.315-.322.527-.827.617-1.553.117-.935-.037-1.395-.241-1.614Zm4.155-.297c-1.044-.116-1.488.091-1.681.297-.204.219-.359.679-.242 1.614.091.726.303 1.231.618 1.553.299.305.784.54 1.638.54.922 0 1.28-.198 1.442-.379.179-.2.308-.578.308-1.371 0-.765-.123-1.242-.37-1.554-.233-.296-.693-.587-1.713-.7Z"></path><path d="M6.25 9.037a.75.75 0 0 1 .75.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 .75-.75Zm4.25.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 1.5 0Z"></path></svg>GitHub Copilot</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Write better code with AI</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/ai/github-app" data-analytics-event="{&quot;action&quot;:&quot;github_copilot_app&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_copilot_app_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-mark-github NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M6.766 11.328c-2.063-.25-3.516-1.734-3.516-3.656 0-.781.281-1.625.75-2.188-.203-.515-.172-1.609.063-2.062.625-.078 1.468.25 1.968.703.594-.187 1.219-.281 1.985-.281.765 0 1.39.094 1.953.265.484-.437 1.344-.765 1.969-.687.218.422.25 1.515.046 2.047.5.593.766 1.39.766 2.203 0 1.922-1.453 3.375-3.547 3.64.531.344.89 1.094.89 1.954v1.625c0 .468.391.734.86.547C13.781 14.359 16 11.53 16 8.03 16 3.61 12.406 0 7.984 0 3.563 0 0 3.61 0 8.031a7.88 7.88 0 0 0 5.172 7.422c.422.156.828-.125.828-.547v-1.25c-.219.094-.5.156-.75.156-1.031 0-1.64-.562-2.078-1.609-.172-.422-.36-.672-.719-.719-.187-.015-.25-.093-.25-.187 0-.188.313-.328.625-.328.453 0 .844.281 1.25.86.313.452.64.655 1.031.655s.641-.14 1-.5c.266-.265.47-.5.657-.656"></path></svg>GitHub Copilot app</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Direct agents from issue to merge</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/mcp" data-analytics-event="{&quot;action&quot;:&quot;mcp_registry&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;mcp_registry_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-mcp NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M5.52 1.12a3.578 3.578 0 0 1 6.078 2.98 3.578 3.578 0 0 1 2.982 6.08l-3.292 3.293a.252.252 0 0 0 0 .354l.843.843a.749.749 0 1 1-1.06 1.06l-.844-.843a1.75 1.75 0 0 1 0-2.474L13.52 9.12a2.08 2.08 0 0 0 0-2.94 2.08 2.08 0 0 0-2.94 0L7.731 9.03A.75.75 0 0 1 6.67 7.97l2.85-2.85a2.08 2.08 0 0 0 0-2.94 2.08 2.08 0 0 0-2.94 0l-4.799 4.8A.75.75 0 0 1 .72 5.92Z"></path><path d="M7.52 3.12a.749.749 0 1 1 1.06 1.06L5.731 7.03A2.079 2.079 0 0 0 8.67 9.97l2.85-2.85a.749.749 0 1 1 1.06 1.06l-2.849 2.85A3.578 3.578 0 0 1 4.67 5.97Z"></path></svg>MCP Registry</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Integrate external tools</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9knd_">DEVELOPER WORKFLOWS</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9knd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/actions" data-analytics-event="{&quot;action&quot;:&quot;actions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;actions_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-workflow NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 1.75C0 .784.784 0 1.75 0h3.5C6.216 0 7 .784 7 1.75v3.5A1.75 1.75 0 0 1 5.25 7H4v4a1 1 0 0 0 1 1h4v-1.25C9 9.784 9.784 9 10.75 9h3.5c.966 0 1.75.784 1.75 1.75v3.5A1.75 1.75 0 0 1 14.25 16h-3.5A1.75 1.75 0 0 1 9 14.25v-.75H5A2.5 2.5 0 0 1 2.5 11V7h-.75A1.75 1.75 0 0 1 0 5.25Zm1.75-.25a.25.25 0 0 0-.25.25v3.5c0 .138.112.25.25.25h3.5a.25.25 0 0 0 .25-.25v-3.5a.25.25 0 0 0-.25-.25Zm9 9a.25.25 0 0 0-.25.25v3.5c0 .138.112.25.25.25h3.5a.25.25 0 0 0 .25-.25v-3.5a.25.25 0 0 0-.25-.25Z"></path></svg>Actions</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Automate any workflow</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/codespaces" data-analytics-event="{&quot;action&quot;:&quot;codespaces&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;codespaces_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-codespaces NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 11.25c0-.966.784-1.75 1.75-1.75h12.5c.966 0 1.75.784 1.75 1.75v3A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm2-9.5C2 .784 2.784 0 3.75 0h8.5C13.216 0 14 .784 14 1.75v5a1.75 1.75 0 0 1-1.75 1.75h-8.5A1.75 1.75 0 0 1 2 6.75Zm1.75-.25a.25.25 0 0 0-.25.25v5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-5a.25.25 0 0 0-.25-.25Zm-2 9.5a.25.25 0 0 0-.25.25v3c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-3a.25.25 0 0 0-.25-.25Z"></path><path d="M7 12.75a.75.75 0 0 1 .75-.75h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1-.75-.75Zm-4 0a.75.75 0 0 1 .75-.75h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1-.75-.75Z"></path></svg>Codespaces</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Instant dev environments</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/issues" data-analytics-event="{&quot;action&quot;:&quot;issues&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;issues_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-issue-opened NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"></path></svg>Issues</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Plan and track work</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/code-review" data-analytics-event="{&quot;action&quot;:&quot;code_review&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;code_review_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-code NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg>Code Review</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Manage code changes</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/code-quality" data-analytics-event="{&quot;action&quot;:&quot;code_quality&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;code_quality_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-codescan-checkmark NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.28 6.28a.75.75 0 1 0-1.06-1.06L6.25 8.19l-.97-.97a.75.75 0 0 0-1.06 1.06l1.5 1.5a.75.75 0 0 0 1.06 0l3.5-3.5Z"></path><path d="M7.5 15a7.5 7.5 0 1 1 5.807-2.754l2.473 2.474a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-2.474-2.473A7.472 7.472 0 0 1 7.5 15Zm0-13.5a6 6 0 1 0 4.094 10.386.748.748 0 0 1 .293-.292 6.002 6.002 0 0 0 1.117-6.486A6.002 6.002 0 0 0 7.5 1.5Z"></path></svg>Code Quality</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Enforce quality at merge</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_dknd_">APPLICATION SECURITY</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_dknd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/security/advanced-security" data-analytics-event="{&quot;action&quot;:&quot;github_advanced_security&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_advanced_security_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-shield-check NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m8.533.133 5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667l5.25-1.68a1.748 1.748 0 0 1 1.066 0Zm-.61 1.429.001.001-5.25 1.68a.251.251 0 0 0-.174.237V7c0 1.36.275 2.666 1.057 3.859.784 1.194 2.121 2.342 4.366 3.298a.196.196 0 0 0 .154 0c2.245-.957 3.582-2.103 4.366-3.297C13.225 9.666 13.5 8.358 13.5 7V3.48a.25.25 0 0 0-.174-.238l-5.25-1.68a.25.25 0 0 0-.153 0ZM11.28 6.28l-3.5 3.5a.75.75 0 0 1-1.06 0l-1.5-1.5a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l.97.97 2.97-2.97a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path></svg>GitHub Advanced Security</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Find and fix vulnerabilities</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/security/advanced-security/code-security" data-analytics-event="{&quot;action&quot;:&quot;code_security&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;code_security_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-code-square NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25Zm7.47 3.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L10.69 8 9.22 6.53a.75.75 0 0 1 0-1.06ZM6.78 6.53 5.31 8l1.47 1.47a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path></svg>Code security</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Secure your code as you build</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/security/advanced-security/secret-protection" data-analytics-event="{&quot;action&quot;:&quot;secret_protection&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;secret_protection_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-lock NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M4 4a4 4 0 0 1 8 0v2h.25c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 12.25 15h-8.5A1.75 1.75 0 0 1 2 13.25v-5.5C2 6.784 2.784 6 3.75 6H4Zm8.25 3.5h-8.5a.25.25 0 0 0-.25.25v5.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25ZM10.5 6V4a2.5 2.5 0 1 0-5 0v2Z"></path></svg>Secret protection</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Stop leaks before they start</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ NavGroup-module__hasSeparator__FnMrN"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_hknd_">EXPLORE</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_hknd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/why-github" data-analytics-event="{&quot;action&quot;:&quot;why_github&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;why_github_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Why GitHub</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://docs.github.com" data-analytics-event="{&quot;action&quot;:&quot;documentation&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;documentation_link_platform_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Documentation</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://github.blog" data-analytics-event="{&quot;action&quot;:&quot;blog&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;blog_link_platform_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Blog</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://github.blog/changelog" data-analytics-event="{&quot;action&quot;:&quot;changelog&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;changelog_link_platform_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Changelog</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/marketplace" data-analytics-event="{&quot;action&quot;:&quot;marketplace&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;marketplace_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Marketplace</span></a></li></ul></div></li></ul><div class="NavDropdown-module__trailingLinkContainer__VgJGL"><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/features" data-analytics-event="{&quot;action&quot;:&quot;view_all_features&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_features_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all features</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></div></div></div></li><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_17d_">Solutions<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_17d_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5l7d_">BY COMPANY SIZE</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5l7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/enterprise" data-analytics-event="{&quot;action&quot;:&quot;enterprises&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;enterprises_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Enterprises</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/team" data-analytics-event="{&quot;action&quot;:&quot;small_and_medium_teams&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;small_and_medium_teams_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Small and medium teams</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/enterprise/startups" data-analytics-event="{&quot;action&quot;:&quot;startups&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;startups_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Startups</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/nonprofits" data-analytics-event="{&quot;action&quot;:&quot;nonprofits&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;nonprofits_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Nonprofits</span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9l7d_">BY USE CASE</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9l7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/use-case/app-modernization" data-analytics-event="{&quot;action&quot;:&quot;app_modernization&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;app_modernization_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">App Modernization</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/use-case/devsecops" data-analytics-event="{&quot;action&quot;:&quot;devsecops&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;devsecops_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">DevSecOps</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/use-case/devops" data-analytics-event="{&quot;action&quot;:&quot;devops&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;devops_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">DevOps</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/use-case/ci-cd" data-analytics-event="{&quot;action&quot;:&quot;ci/cd&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;ci/cd_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">CI/CD</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/solutions/use-case" data-analytics-event="{&quot;action&quot;:&quot;view_all_use_cases&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_use_cases_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all use cases</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_dl7d_">BY INDUSTRY</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_dl7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/healthcare" data-analytics-event="{&quot;action&quot;:&quot;healthcare&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;healthcare_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Healthcare</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/financial-services" data-analytics-event="{&quot;action&quot;:&quot;financial_services&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;financial_services_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Financial services</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/manufacturing" data-analytics-event="{&quot;action&quot;:&quot;manufacturing&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;manufacturing_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Manufacturing</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/government" data-analytics-event="{&quot;action&quot;:&quot;government&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;government_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Government</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/solutions/industry" data-analytics-event="{&quot;action&quot;:&quot;view_all_industries&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_industries_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all industries</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></li></ul></div></li></ul><div class="NavDropdown-module__trailingLinkContainer__VgJGL"><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/solutions" data-analytics-event="{&quot;action&quot;:&quot;view_all_solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_solutions_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all solutions</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></div></div></div></li><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_1nd_">Resources<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_1nd_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5lnd_">EXPLORE BY TOPIC</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5lnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/articles?topic=ai" data-analytics-event="{&quot;action&quot;:&quot;ai&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;ai_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">AI</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/articles?topic=software-development" data-analytics-event="{&quot;action&quot;:&quot;software_development&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;software_development_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Software Development</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/articles?topic=devops" data-analytics-event="{&quot;action&quot;:&quot;devops&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;devops_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">DevOps</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/articles?topic=security" data-analytics-event="{&quot;action&quot;:&quot;security&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;security_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Security</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/resources/articles" data-analytics-event="{&quot;action&quot;:&quot;view_all_topics&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_topics_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all topics</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9lnd_">EXPLORE BY TYPE</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9lnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/customer-stories" data-analytics-event="{&quot;action&quot;:&quot;customer_stories&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;customer_stories_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Customer stories</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/events" data-analytics-event="{&quot;action&quot;:&quot;events__webinars&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;events__webinars_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Events &amp; webinars</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/whitepapers" data-analytics-event="{&quot;action&quot;:&quot;ebooks__reports&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;ebooks__reports_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Ebooks &amp; reports</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/executive-insights" data-analytics-event="{&quot;action&quot;:&quot;business_insights&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;business_insights_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Business insights</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://skills.github.com" data-analytics-event="{&quot;action&quot;:&quot;github_skills&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_skills_link_resources_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">GitHub Skills</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_dlnd_">SUPPORT &amp; SERVICES</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_dlnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://docs.github.com" data-analytics-event="{&quot;action&quot;:&quot;documentation&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;documentation_link_resources_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Documentation</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://support.github.com" data-analytics-event="{&quot;action&quot;:&quot;customer_support&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;customer_support_link_resources_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Customer support</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/orgs/community/discussions" data-analytics-event="{&quot;action&quot;:&quot;community_forum&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;community_forum_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Community forum</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/trust-center" data-analytics-event="{&quot;action&quot;:&quot;trust_center&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;trust_center_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Trust center</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/partners" data-analytics-event="{&quot;action&quot;:&quot;partners&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;partners_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Partners</span></a></li></ul></div></li></ul><div class="NavDropdown-module__trailingLinkContainer__VgJGL"><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/resources" data-analytics-event="{&quot;action&quot;:&quot;view_all_resources&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_resources_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all resources</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></div></div></div></li><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_27d_">Open Source<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_27d_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5m7d_">COMMUNITY</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5m7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/open-source/sponsors" data-analytics-event="{&quot;action&quot;:&quot;github_sponsors&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_sponsors_link_open_source_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-sponsor-tiers NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.586 1C12.268 1 13.5 2.37 13.5 4.25c0 1.745-.996 3.359-2.622 4.831-.166.15-.336.297-.509.438l1.116 5.584a.75.75 0 0 1-.991.852l-2.409-.876a.25.25 0 0 0-.17 0l-2.409.876a.75.75 0 0 1-.991-.852L5.63 9.519a13.78 13.78 0 0 1-.51-.438C3.497 7.609 2.5 5.995 2.5 4.25 2.5 2.37 3.732 1 5.414 1c.963 0 1.843.403 2.474 1.073L8 2.198l.112-.125a3.385 3.385 0 0 1 2.283-1.068L10.586 1Zm-3.621 9.495-.718 3.594 1.155-.42a1.75 1.75 0 0 1 1.028-.051l.168.051 1.154.42-.718-3.592c-.199.13-.37.235-.505.314l-.169.097a.75.75 0 0 1-.72 0 9.54 9.54 0 0 1-.515-.308l-.16-.105ZM10.586 2.5c-.863 0-1.611.58-1.866 1.459-.209.721-1.231.721-1.44 0C7.025 3.08 6.277 2.5 5.414 2.5 4.598 2.5 4 3.165 4 4.25c0 1.23.786 2.504 2.128 3.719.49.443 1.018.846 1.546 1.198l.325.21.076-.047.251-.163a13.341 13.341 0 0 0 1.546-1.198C11.214 6.754 12 5.479 12 4.25c0-1.085-.598-1.75-1.414-1.75Z"></path></svg>GitHub Sponsors</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Fund open source developers</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9m7d_">PROGRAMS</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9m7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://securitylab.github.com" data-analytics-event="{&quot;action&quot;:&quot;security_lab&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;security_lab_link_open_source_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Security Lab</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://maintainers.github.com" data-analytics-event="{&quot;action&quot;:&quot;maintainer_community&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;maintainer_community_link_open_source_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Maintainer Community</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://stars.github.com" data-analytics-event="{&quot;action&quot;:&quot;github_stars&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_stars_link_open_source_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">GitHub Stars</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://archiveprogram.github.com" data-analytics-event="{&quot;action&quot;:&quot;archive_program&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;archive_program_link_open_source_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Archive Program</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_dm7d_">REPOSITORIES</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_dm7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/topics" data-analytics-event="{&quot;action&quot;:&quot;topics&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;topics_link_open_source_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Topics</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/trending" data-analytics-event="{&quot;action&quot;:&quot;trending&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;trending_link_open_source_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Trending</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/collections" data-analytics-event="{&quot;action&quot;:&quot;collections&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;collections_link_open_source_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Collections</span></a></li></ul></div></li></ul></div></div></li><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_2nd_">Enterprise<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_2nd_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5mnd_">ENTERPRISE SOLUTIONS</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5mnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/enterprise" data-analytics-event="{&quot;action&quot;:&quot;enterprise_platform&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;enterprise_platform_link_enterprise_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-stack NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.122.392a1.75 1.75 0 0 1 1.756 0l5.003 2.902c.83.481.83 1.68 0 2.162L8.878 8.358a1.75 1.75 0 0 1-1.756 0L2.119 5.456a1.251 1.251 0 0 1 0-2.162ZM8.125 1.69a.248.248 0 0 0-.25 0l-4.63 2.685 4.63 2.685a.248.248 0 0 0 .25 0l4.63-2.685ZM1.601 7.789a.75.75 0 0 1 1.025-.273l5.249 3.044a.248.248 0 0 0 .25 0l5.249-3.044a.75.75 0 0 1 .752 1.298l-5.248 3.044a1.75 1.75 0 0 1-1.756 0L1.874 8.814A.75.75 0 0 1 1.6 7.789Zm0 3.5a.75.75 0 0 1 1.025-.273l5.249 3.044a.248.248 0 0 0 .25 0l5.249-3.044a.75.75 0 0 1 .752 1.298l-5.248 3.044a1.75 1.75 0 0 1-1.756 0l-5.248-3.044a.75.75 0 0 1-.273-1.025Z"></path></svg>Enterprise platform</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">AI-powered developer platform</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9mnd_">AVAILABLE ADD-ONS</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9mnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/security/advanced-security" data-analytics-event="{&quot;action&quot;:&quot;github_advanced_security&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_advanced_security_link_enterprise_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-shield-check NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m8.533.133 5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667l5.25-1.68a1.748 1.748 0 0 1 1.066 0Zm-.61 1.429.001.001-5.25 1.68a.251.251 0 0 0-.174.237V7c0 1.36.275 2.666 1.057 3.859.784 1.194 2.121 2.342 4.366 3.298a.196.196 0 0 0 .154 0c2.245-.957 3.582-2.103 4.366-3.297C13.225 9.666 13.5 8.358 13.5 7V3.48a.25.25 0 0 0-.174-.238l-5.25-1.68a.25.25 0 0 0-.153 0ZM11.28 6.28l-3.5 3.5a.75.75 0 0 1-1.06 0l-1.5-1.5a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l.97.97 2.97-2.97a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path></svg>GitHub Advanced Security</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Enterprise-grade security features</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/copilot/copilot-business" data-analytics-event="{&quot;action&quot;:&quot;copilot_for_business&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;copilot_for_business_link_enterprise_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copilot NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.998 15.035c-4.562 0-7.873-2.914-7.998-3.749V9.338c.085-.628.677-1.686 1.588-2.065.013-.07.024-.143.036-.218.029-.183.06-.384.126-.612-.201-.508-.254-1.084-.254-1.656 0-.87.128-1.769.693-2.484.579-.733 1.494-1.124 2.724-1.261 1.206-.134 2.262.034 2.944.765.05.053.096.108.139.165.044-.057.094-.112.143-.165.682-.731 1.738-.899 2.944-.765 1.23.137 2.145.528 2.724 1.261.566.715.693 1.614.693 2.484 0 .572-.053 1.148-.254 1.656.066.228.098.429.126.612.012.076.024.148.037.218.924.385 1.522 1.471 1.591 2.095v1.872c0 .766-3.351 3.795-8.002 3.795Zm0-1.485c2.28 0 4.584-1.11 5.002-1.433V7.862l-.023-.116c-.49.21-1.075.291-1.727.291-1.146 0-2.059-.327-2.71-.991A3.222 3.222 0 0 1 8 6.303a3.24 3.24 0 0 1-.544.743c-.65.664-1.563.991-2.71.991-.652 0-1.236-.081-1.727-.291l-.023.116v4.255c.419.323 2.722 1.433 5.002 1.433ZM6.762 2.83c-.193-.206-.637-.413-1.682-.297-1.019.113-1.479.404-1.713.7-.247.312-.369.789-.369 1.554 0 .793.129 1.171.308 1.371.162.181.519.379 1.442.379.853 0 1.339-.235 1.638-.54.315-.322.527-.827.617-1.553.117-.935-.037-1.395-.241-1.614Zm4.155-.297c-1.044-.116-1.488.091-1.681.297-.204.219-.359.679-.242 1.614.091.726.303 1.231.618 1.553.299.305.784.54 1.638.54.922 0 1.28-.198 1.442-.379.179-.2.308-.578.308-1.371 0-.765-.123-1.242-.37-1.554-.233-.296-.693-.587-1.713-.7Z"></path><path d="M6.25 9.037a.75.75 0 0 1 .75.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 .75-.75Zm4.25.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 1.5 0Z"></path></svg>Copilot for Business</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Enterprise-grade AI features</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/enterprise/premium-support" data-analytics-event="{&quot;action&quot;:&quot;premium_support&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;premium_support_link_enterprise_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-comment-discussion NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.75 1h8.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 10.25 10H7.061l-2.574 2.573A1.458 1.458 0 0 1 2 11.543V10h-.25A1.75 1.75 0 0 1 0 8.25v-5.5C0 1.784.784 1 1.75 1ZM1.5 2.75v5.5c0 .138.112.25.25.25h1a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h3.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25Zm13 2a.25.25 0 0 0-.25-.25h-.5a.75.75 0 0 1 0-1.5h.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 14.25 12H14v1.543a1.458 1.458 0 0 1-2.487 1.03L9.22 12.28a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l2.22 2.22v-2.19a.75.75 0 0 1 .75-.75h1a.25.25 0 0 0 .25-.25Z"></path></svg>Premium Support</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Enterprise-grade 24/7 support</span></span></a></li></ul></div></li></ul></div></div></li><li><a href="https://github.com/pricing" data-analytics-event="{&quot;action&quot;:&quot;pricing&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;pricing&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;pricing_link_pricing_navbar&quot;}" class="MarketingNavigation-module__navLink__hUomM">Pricing</a></li></ul></nav><div class="MarketingHeader-module__ctaContainer__tBmPz"><div class="HeaderSearch-module__searchSlot__oVOUS"><button class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw HeaderSearch-module__trigger__zsF9q" type="button" aria-haspopup="dialog" aria-expanded="false" aria-label="Search or jump to, type / to search" data-analytics-event="{&quot;action&quot;:&quot;searchbar&quot;,&quot;tag&quot;:&quot;input&quot;,&quot;context&quot;:&quot;global&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;searchbar_input_global_navbar&quot;}"><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH"><span class="HeaderSearch-module__content__kMpxU"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-search HeaderSearch-module__icon__wcrHX" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path></svg><span class="HeaderSearch-module__label__d1iWG">Search</span><kbd class="HeaderSearch-module__kbd__HNG0o" aria-hidden="true">/</kbd></span></span></span></button><div class="d-none"></div></div><div class="AuthCTAs-module__signInWrap__q2P60"><a class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw AuthCTAs-module__cta__WpwQq AuthCTAs-module__desktopActionGap__UZuXT AuthCTAs-module__hiddenBelowLg__BfKBw" href="/login?return_to=https%3A%2F%2Fgithub.com%2Ftimerring%2Fbackend-tutorial%2Fblob%2Fmain%2Fjava-tutorial%2Fch24_MySQL_basic.md" data-analytics-event="{&quot;action&quot;:&quot;sign_in&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;auth_cta&quot;,&quot;location&quot;:&quot;header&quot;,&quot;label&quot;:&quot;sign_in_link_auth_cta_header&quot;}" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/timerring/backend-tutorial/blob/main/java-tutorial/ch24_MySQL_basic.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="2cbce157594733030dcae282e0218fcde7830f12f4d5acb2811c94206e9be403"><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH">Sign in</span></span></a></div><a class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--secondary___gHnw_ Primer_Brand__Button-module__Button--size-small___zQrEw AuthCTAs-module__cta__WpwQq" href="/signup?ref_cta=Sign+up&amp;ref_loc=header+logged+out&amp;ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fblob%2Fshow&amp;source=header-repo&amp;source_repo=timerring%2Fbackend-tutorial" data-analytics-event="{&quot;action&quot;:&quot;sign_up&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;auth_cta&quot;,&quot;location&quot;:&quot;header&quot;,&quot;label&quot;:&quot;sign_up_link_auth_cta_header&quot;}" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/timerring/backend-tutorial/blob/main/java-tutorial/ch24_MySQL_basic.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="2cbce157594733030dcae282e0218fcde7830f12f4d5acb2811c94206e9be403"><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-secondary___eJ0_a">Sign up</span></span></a><button class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw HeaderAppearanceSettings-module__trigger__hUheK" type="button" aria-haspopup="dialog" aria-labelledby="_R_fbd_"><span class="Primer_Brand__Button-module__Button__leading-visual___jjtTe" data-testid="Button-leading-visual"><svg data-component="Octicon" focusable="false" aria-hidden="true" class="octicon octicon-sliders Primer_Brand__Button-module__Button__icon-visual____qybb" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M15 2.75a.75.75 0 0 1-.75.75h-4a.75.75 0 0 1 0-1.5h4a.75.75 0 0 1 .75.75Zm-8.5.75v1.25a.75.75 0 0 0 1.5 0v-4a.75.75 0 0 0-1.5 0V2H1.75a.75.75 0 0 0 0 1.5H6.5Zm1.25 5.25a.75.75 0 0 0 0-1.5h-6a.75.75 0 0 0 0 1.5h6ZM15 8a.75.75 0 0 1-.75.75H11.5V10a.75.75 0 1 1-1.5 0V6a.75.75 0 0 1 1.5 0v1.25h2.75A.75.75 0 0 1 15 8Zm-9 5.25v-2a.75.75 0 0 0-1.5 0v1.25H1.75a.75.75 0 0 0 0 1.5H4.5v1.25a.75.75 0 0 0 1.5 0v-2Zm9 0a.75.75 0 0 1-.75.75h-6a.75.75 0 0 1 0-1.5h6a.75.75 0 0 1 .75.75Z"></path></svg></span><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH"></span></span></button><div class="Primer_Brand__Tooltip-module__Tooltip___0Eipx" data-direction="s" aria-hidden="true" id="_R_fbd_">Appearance settings</div></div></div></div></div><div class="MarketingHeader-module__bottomBorder__uZT38" aria-hidden="true"></div></header></div></div>
</react-partial>



      <div hidden="hidden" data-view-component="true" class="js-stale-session-flash stale-session-flash flash flash-warn flash-full">
  
        <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
    <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>
</svg>
        <span class="js-stale-session-flash-signed-in" hidden>You signed in with another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span>
        <span class="js-stale-session-flash-signed-out" hidden>You signed out in another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span>
        <span class="js-stale-session-flash-switched" hidden>You switched accounts on another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span>

    <button id="icon-button-499942c8-6018-4ee8-8cb3-40945f79cad7" aria-labelledby="tooltip-c72aaaf8-a942-4b45-a212-1124298f4c98" type="button" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium flash-close js-flash-close">  <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x Button-visual">
    <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
</svg>
</button><tool-tip id="tooltip-c72aaaf8-a942-4b45-a212-1124298f4c98" for="icon-button-499942c8-6018-4ee8-8cb3-40945f79cad7" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Dismiss alert</tool-tip>


  
</div>
    </div>

  <div id="start-of-content" class="show-on-focus"></div>








    <div id="js-flash-container" class="flash-container" data-turbo-replace>





  <template class="js-flash-template">
    
<div class="flash flash-full   {{ className }}">
  <div >
    <button autofocus class="flash-close js-flash-close" type="button" aria-label="Dismiss this message">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
    <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
</svg>
    </button>
    <div aria-atomic="true" role="alert" class="js-flash-alert">
      
      <div>{{ message }}</div>

    </div>
  </div>
</div>
  </template>
</div>


    






  <div
    class="application-main "
    data-commit-hovercards-enabled
    data-discussion-hovercards-enabled
    data-issue-and-pr-hovercards-enabled
    data-project-hovercards-enabled
  >
        <div itemscope itemtype="http://schema.org/SoftwareSourceCode" class="">
    <main id="js-repo-pjax-container" >
      
      








  

    <div id="repository-container-header"  class="tmp-pt-3 hide-full-screen" style="background-color: var(--page-header-bgColor, var(--color-page-header-bg));" data-turbo-replace>

        <div class="d-flex flex-nowrap flex-justify-end tmp-mb-3  tmp-px-3 tmp-px-lg-5" style="gap: 1rem;">

          <div class="flex-auto min-width-0 width-fit">
              
  <div class=" d-flex flex-wrap flex-items-center wb-break-word f3 text-normal">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo color-fg-muted mr-2 tmp-mr-2">
    <path d="M2 2.5A2.5 2.5 0 0 1 4.5 0h8.75a.75.75 0 0 1 .75.75v12.5a.75.75 0 0 1-.75.75h-2.5a.75.75 0 0 1 0-1.5h1.75v-2h-8a1 1 0 0 0-.714 1.7.75.75 0 1 1-1.072 1.05A2.495 2.495 0 0 1 2 11.5Zm10.5-1h-8a1 1 0 0 0-1 1v6.708A2.486 2.486 0 0 1 4.5 9h8ZM5 12.25a.25.25 0 0 1 .25-.25h3.5a.25.25 0 0 1 .25.25v3.25a.25.25 0 0 1-.4.2l-1.45-1.087a.249.249 0 0 0-.3 0L5.4 15.7a.25.25 0 0 1-.4-.2Z"></path>
</svg>
    
    <span class="author flex-self-stretch" itemprop="author">
      <a class="url fn" rel="author" data-hovercard-type="user" data-hovercard-url="/users/timerring/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/timerring">
        timerring
</a>    </span>
    <span class="mx-1 flex-self-stretch color-fg-muted">/</span>
    <strong itemprop="name" class="mr-2 flex-self-stretch">
      <a data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" href="/timerring/backend-tutorial">backend-tutorial</a>
    </strong>

    <span></span><span class="Label Label--secondary v-align-middle mr-1">Public</span>
  </div>


          </div>

          <div id="repository-details-container" class="flex-shrink-0" data-turbo-replace style="max-width: 70%;">
              <ul class="pagehead-actions flex-shrink-0 d-none d-md-inline" style="padding: 2px 0;">
    
      

  <li>
            <a href="/login?return_to=%2Ftimerring%2Fbackend-tutorial" rel="nofollow" id="repository-details-watch-button" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;notification subscription menu watch&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;originating_url&quot;:&quot;https://github.com/timerring/backend-tutorial/blob/main/java-tutorial/ch24_MySQL_basic.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="5db9c85b7bf6fc273cfc10e2780f433ba547087d53e451a5c36b8eb1d53885bc" aria-label="You must be signed in to change notification settings" data-view-component="true" class="btn-sm btn">    <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-bell mr-2 tmp-mr-2">
    <path d="M8 16a2 2 0 0 0 1.985-1.75c.017-.137-.097-.25-.235-.25h-3.5c-.138 0-.252.113-.235.25A2 2 0 0 0 8 16ZM3 5a5 5 0 0 1 10 0v2.947c0 .05.015.098.042.139l1.703 2.555A1.519 1.519 0 0 1 13.482 13H2.518a1.516 1.516 0 0 1-1.263-2.36l1.703-2.554A.255.255 0 0 0 3 7.947Zm5-3.5A3.5 3.5 0 0 0 4.5 5v2.947c0 .346-.102.683-.294.97l-1.703 2.556a.017.017 0 0 0-.003.01l.001.006c0 .002.002.004.004.006l.006.004.007.001h10.964l.007-.001.006-.004.004-.006.001-.007a.017.017 0 0 0-.003-.01l-1.703-2.554a1.745 1.745 0 0 1-.294-.97V5A3.5 3.5 0 0 0 8 1.5Z"></path>
</svg>Notifications
</a>    <tool-tip id="tooltip-8a31d7ad-f3c4-44e8-9e0a-096c399081ae" for="repository-details-watch-button" popover="manual" data-direction="s" data-type="description" data-view-component="true" class="sr-only position-absolute">You must be signed in to change notification settings</tool-tip>

  </li>

  <li>
          <a icon="repo-forked" id="fork-button" href="/login?return_to=%2Ftimerring%2Fbackend-tutorial" rel="nofollow" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;repo details fork button&quot;,&quot;repository_id&quot;:625897036,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;originating_url&quot;:&quot;https://github.com/timerring/backend-tutorial/blob/main/java-tutorial/ch24_MySQL_basic.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="c150c11afc22bd6ad44f052d2037f6800d0019642663cedf36ba66c0fb86f479" data-view-component="true" class="btn-sm btn">    <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo-forked mr-2 tmp-mr-2">
    <path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"></path>
</svg>Fork
    <span id="repo-network-counter" data-pjax-replace="true" data-turbo-replace="true" title="88" data-view-component="true" class="Counter">88</span>
</a>
  </li>

  <li>
        <div data-view-component="true" class="BtnGroup d-flex">
        <a href="/login?return_to=%2Ftimerring%2Fbackend-tutorial" rel="nofollow" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;star button&quot;,&quot;repository_id&quot;:625897036,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;originating_url&quot;:&quot;https://github.com/timerring/backend-tutorial/blob/main/java-tutorial/ch24_MySQL_basic.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="934680b2000c86892343fa63f2fdbaccc24d7d983e9c18fc5a472b21bd4e75a3" aria-label="You must be signed in to star a repository" data-view-component="true" class="tooltipped tooltipped-sw btn-sm btn">    <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-star v-align-text-bottom d-inline-block mr-2 tmp-mr-2">
    <path d="M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25Zm0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41L8 2.694Z"></path>
</svg><span data-view-component="true" class="d-inline">
          Star
</span>          <span id="repo-stars-counter-star" aria-label="477 users starred this repository" data-singular-suffix="user starred this repository" data-plural-suffix="users starred this repository" data-turbo-replace="true" title="477" data-view-component="true" class="Counter js-social-count">477</span>
</a></div>
  </li>

</ul>

          </div>
        </div>

          <div id="responsive-meta-container" data-turbo-replace>
</div>


            <nav data-pjax="#js-repo-pjax-container" aria-label="Repository" data-view-component="true" class="js-repo-nav js-sidenav-container-pjax js-responsive-underlinenav overflow-hidden UnderlineNav px-3 tmp-px-3 px-md-4 tmp-px-md-4 px-lg-5 tmp-px-lg-5">

  <ul data-view-component="true" class="UnderlineNav-body list-style-none">
      <li data-view-component="true" class="d-inline-flex">
  <a id="code-tab" href="/timerring/backend-tutorial" data-tab-item="i0code-tab" data-selected-links="repo_source repo_downloads repo_commits repo_releases repo_tags repo_branches repo_packages repo_deployments repo_attestations /timerring/backend-tutorial" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g c" data-command-id="repositories:go-to-code" data-react-nav="code-view" data-react-nav-anchor="code-view-repo-link" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Code&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" aria-current="page" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item selected">
    
              <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code UnderlineNav-octicon d-none d-sm-inline">
    <path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path>
</svg>
        <span data-content="Code">Code</span>
          <span id="code-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span>


    
</a></li>
      <li data-view-component="true" class="d-inline-flex">
  <a id="issues-tab" href="/timerring/backend-tutorial/issues" data-tab-item="i1issues-tab" data-selected-links="repo_issues repo_labels repo_milestones /timerring/backend-tutorial/issues" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g i" data-command-id="repositories:go-to-issues" data-react-nav="issues-react" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Issues&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
    
              <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-issue-opened UnderlineNav-octicon d-none d-sm-inline">
    <path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"></path>
</svg>
        <span data-content="Issues">Issues</span>
          <span id="issues-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="0" hidden="hidden" data-view-component="true" class="Counter">0</span>


    
</a></li>
      <li data-view-component="true" class="d-inline-flex">
  <a id="pull-requests-tab" href="/timerring/backend-tutorial/pulls" data-tab-item="i2pull-requests-tab" data-selected-links="repo_pulls checks /timerring/backend-tutorial/pulls" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g p" data-command-id="repositories:go-to-pull-requests" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Pull requests&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
    
              <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-git-pull-request UnderlineNav-octicon d-none d-sm-inline">
    <path d="M1.5 3.25a2.25 2.25 0 1 1 3 2.122v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.25 2.25 0 0 1 1.5 3.25Zm5.677-.177L9.573.677A.25.25 0 0 1 10 .854V2.5h1A2.5 2.5 0 0 1 13.5 5v5.628a2.251 2.251 0 1 1-1.5 0V5a1 1 0 0 0-1-1h-1v1.646a.25.25 0 0 1-.427.177L7.177 3.427a.25.25 0 0 1 0-.354ZM3.75 2.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm0 9.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm8.25.75a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Z"></path>
</svg>
        <span data-content="Pull requests">Pull requests</span>
          <span id="pull-requests-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="0" hidden="hidden" data-view-component="true" class="Counter">0</span>


    
</a></li>
      <li data-view-component="true" class="d-inline-flex">
  <a id="actions-tab" href="/timerring/backend-tutorial/actions" data-tab-item="i3actions-tab" data-selected-links="repo_actions /timerring/backend-tutorial/actions" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g a" data-command-id="repositories:go-to-actions" data-react-nav="actions-workflows" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Actions&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
    
              <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-play UnderlineNav-octicon d-none d-sm-inline">
    <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path>
</svg>
        <span data-content="Actions">Actions</span>
          <span id="actions-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span>


    
</a></li>
      <li data-view-component="true" class="d-inline-flex">
  <a id="projects-tab" href="/timerring/backend-tutorial/projects" data-tab-item="i4projects-tab" data-selected-links="repo_projects new_repo_project repo_project /timerring/backend-tutorial/projects" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g b" data-command-id="repositories:go-to-projects" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Projects&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
    
              <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-table UnderlineNav-octicon d-none d-sm-inline">
    <path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25ZM6.5 6.5v8h7.75a.25.25 0 0 0 .25-.25V6.5Zm8-1.5V1.75a.25.25 0 0 0-.25-.25H6.5V5Zm-13 1.5v7.75c0 .138.112.25.25.25H5v-8ZM5 5V1.5H1.75a.25.25 0 0 0-.25.25V5Z"></path>
</svg>
        <span data-content="Projects">Projects</span>
          <span id="projects-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span>


    
</a></li>
      <li data-view-component="true" class="d-inline-flex">
  <a id="security-and-quality-tab" href="/timerring/backend-tutorial/security" data-tab-item="i5security-and-quality-tab" data-selected-links="security overview alerts policy token_scanning code_scanning /timerring/backend-tutorial/security" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g s" data-command-id="repositories:go-to-security" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Security and quality&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
    
              <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-shield UnderlineNav-octicon d-none d-sm-inline">
    <path d="M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>
</svg>
        <span data-content="Security and quality">Security and quality</span>
          <span id="security-and-quality-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="0" hidden="hidden" data-view-component="true" class="Counter">0</span>


    
</a></li>
      <li data-view-component="true" class="d-inline-flex">
  <a id="insights-tab" href="/timerring/backend-tutorial/pulse" data-tab-item="i6insights-tab" data-selected-links="repo_graphs repo_contributors dependency_graph dependabot_updates pulse people community /timerring/backend-tutorial/pulse" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-command-id="repositories:go-to-insights" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Insights&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
    
              <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-graph UnderlineNav-octicon d-none d-sm-inline">
    <path d="M1.5 1.75V13.5h13.75a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1-.75-.75V1.75a.75.75 0 0 1 1.5 0Zm14.28 2.53-5.25 5.25a.75.75 0 0 1-1.06 0L7 7.06 4.28 9.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.25-3.25a.75.75 0 0 1 1.06 0L10 7.94l4.72-4.72a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path>
</svg>
        <span data-content="Insights">Insights</span>
          <span id="insights-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span>


    
</a></li>
</ul>
    <div style="visibility:hidden;" data-view-component="true" class="UnderlineNav-actions js-responsive-underlinenav-overflow position-absolute pr-3 tmp-pr-3 pr-md-4 tmp-pr-md-4 pr-lg-5 tmp-pr-lg-5 right-0">      <action-menu data-select-variant="none" data-view-component="true">
  <focus-group direction="vertical" mnemonics retain>
    <button id="action-menu-5805c56e-fce1-4bf8-8068-0e379c0c3845-button" popovertarget="action-menu-5805c56e-fce1-4bf8-8068-0e379c0c3845-overlay" aria-controls="action-menu-5805c56e-fce1-4bf8-8068-0e379c0c3845-list" aria-haspopup="true" aria-labelledby="tooltip-660ee9f0-3fec-42ed-a149-26c1710df50b" type="button" data-view-component="true" class="Button Button--iconOnly Button--secondary Button--medium UnderlineNav-item">  <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-kebab-horizontal Button-visual">
    <path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path>
</svg>
</button><tool-tip id="tooltip-660ee9f0-3fec-42ed-a149-26c1710df50b" for="action-menu-5805c56e-fce1-4bf8-8068-0e379c0c3845-button" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Additional navigation options</tool-tip>


<anchored-position data-target="action-menu.overlay" id="action-menu-5805c56e-fce1-4bf8-8068-0e379c0c3845-overlay" anchor="action-menu-5805c56e-fce1-4bf8-8068-0e379c0c3845-button" align="start" side="outside-bottom" anchor-offset="normal" popover="auto" data-view-component="true">
  <div data-view-component="true" class="Overlay Overlay--size-auto">
    
      <div data-view-component="true" class="Overlay-body Overlay-body--paddingNone">          <action-list>
  <div data-view-component="true">
    <ul aria-labelledby="action-menu-5805c56e-fce1-4bf8-8068-0e379c0c3845-button" id="action-menu-5805c56e-fce1-4bf8-8068-0e379c0c3845-list" role="menu" data-view-component="true" class="ActionListWrap--inset ActionListWrap">
        <li hidden="hidden" data-menu-item="i0code-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem">
    
    
    <a tabindex="-1" id="item-fb0bb082-fbd5-4f45-b0a2-e1baf6eddeee" href="/timerring/backend-tutorial" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16">
        <span class="ActionListItem-visual ActionListItem-visual--leading">
          <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code">
    <path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path>
</svg>
        </span>
      
        <span data-view-component="true" class="ActionListItem-label">
          Code
</span>      
</a>
  
</li>
        <li hidden="hidden" data-menu-item="i1issues-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem">
    
    
    <a tabindex="-1" id="item-dd3a6b45-a1ad-4682-9af5-7104387046f8" href="/timerring/backend-tutorial/issues" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16">
        <span class="ActionListItem-visual ActionListItem-visual--leading">
          <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-issue-opened">
    <path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"></path>
</svg>
        </span>
      
        <span data-view-component="true" class="ActionListItem-label">
          Issues
</span>      
</a>
  
</li>
        <li hidden="hidden" data-menu-item="i2pull-requests-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem">
    
    
    <a tabindex="-1" id="item-360c419b-0c8b-4134-a81d-07b943410f65" href="/timerring/backend-tutorial/pulls" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16">
        <span class="ActionListItem-visual ActionListItem-visual--leading">
          <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-git-pull-request">
    <path d="M1.5 3.25a2.25 2.25 0 1 1 3 2.122v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.25 2.25 0 0 1 1.5 3.25Zm5.677-.177L9.573.677A.25.25 0 0 1 10 .854V2.5h1A2.5 2.5 0 0 1 13.5 5v5.628a2.251 2.251 0 1 1-1.5 0V5a1 1 0 0 0-1-1h-1v1.646a.25.25 0 0 1-.427.177L7.177 3.427a.25.25 0 0 1 0-.354ZM3.75 2.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm0 9.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm8.25.75a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Z"></path>
</svg>
        </span>
      
        <span data-view-component="true" class="ActionListItem-label">
          Pull requests
</span>      
</a>
  
</li>
        <li hidden="hidden" data-menu-item="i3actions-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem">
    
    
    <a tabindex="-1" id="item-d7ed6bb0-e0b1-4463-a455-d141c1d33c79" href="/timerring/backend-tutorial/actions" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16">
        <span class="ActionListItem-visual ActionListItem-visual--leading">
          <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-play">
    <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path>
</svg>
        </span>
      
        <span data-view-component="true" class="ActionListItem-label">
          Actions
</span>      
</a>
  
</li>
        <li hidden="hidden" data-menu-item="i4projects-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem">
    
    
    <a tabindex="-1" id="item-ee4b3979-f9fc-4eb2-b3c4-9ba87f939f79" href="/timerring/backend-tutorial/projects" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16">
        <span class="ActionListItem-visual ActionListItem-visual--leading">
          <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-table">
    <path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25ZM6.5 6.5v8h7.75a.25.25 0 0 0 .25-.25V6.5Zm8-1.5V1.75a.25.25 0 0 0-.25-.25H6.5V5Zm-13 1.5v7.75c0 .138.112.25.25.25H5v-8ZM5 5V1.5H1.75a.25.25 0 0 0-.25.25V5Z"></path>
</svg>
        </span>
      
        <span data-view-component="true" class="ActionListItem-label">
          Projects
</span>      
</a>
  
</li>
        <li hidden="hidden" data-menu-item="i5security-and-quality-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem">
    
    
    <a tabindex="-1" id="item-6b2dfb08-7543-4b57-a83e-6c7beb910469" href="/timerring/backend-tutorial/security" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16">
        <span class="ActionListItem-visual ActionListItem-visual--leading">
          <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-shield">
    <path d="M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>
</svg>
        </span>
      
        <span data-view-component="true" class="ActionListItem-label">
          Security and quality
</span>      
</a>
  
</li>
        <li hidden="hidden" data-menu-item="i6insights-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem">
    
    
    <a tabindex="-1" id="item-4c8210dc-37e5-4e29-8047-81902b687c37" href="/timerring/backend-tutorial/pulse" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16">
        <span class="ActionListItem-visual ActionListItem-visual--leading">
          <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-graph">
    <path d="M1.5 1.75V13.5h13.75a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1-.75-.75V1.75a.75.75 0 0 1 1.5 0Zm14.28 2.53-5.25 5.25a.75.75 0 0 1-1.06 0L7 7.06 4.28 9.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.25-3.25a.75.75 0 0 1 1.06 0L10 7.94l4.72-4.72a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path>
</svg>
        </span>
      
        <span data-view-component="true" class="ActionListItem-label">
          Insights
</span>      
</a>
  
</li>
</ul>    
</div></action-list>


</div>
      
</div></anchored-position>  </focus-group>
</action-menu></div>
</nav>

    </div>
  



<turbo-frame id="repo-content-turbo-frame" target="_top" data-turbo-action="advance" class="">
    <div id="repo-content-pjax-container" class="repository-content " >
    



    
      
    








<react-app
  app-name="code-view"
  initial-path="/timerring/backend-tutorial/blob/main/java-tutorial/ch24_MySQL_basic.md"
  style="display: block; min-height: calc(100vh - 64px);"
  data-attempted-ssr="true"
  data-ssr="true"
  data-lazy="false"
  data-alternate="false"
  data-data-router-enabled="true"
  data-react-profiling="false"
>
  
  <script type="application/json" data-target="react-app.embeddedData">{"payload":{"codeViewBlobRoute":{"csv":null,"csvError":null,"headerInfo":{"toc":[{"level":1,"text":"第24章 零基础学MySQL","anchor":"第24章-零基础学mysql","htmlText":"第24章 零基础学MySQL"},{"level":2,"text":"解决之道","anchor":"解决之道","htmlText":"解决之道"},{"level":3,"text":"文件、数据库","anchor":"文件数据库","htmlText":"文件、数据库"},{"level":3,"text":"MySQL 数据库的安装和配置","anchor":"mysql-数据库的安装和配置","htmlText":"MySQL 数据库的安装和配置"},{"level":3,"text":"使用命令行窗口连接MYSQL 数据库","anchor":"使用命令行窗口连接mysql-数据库","htmlText":"使用命令行窗口连接MYSQL 数据库"},{"level":3,"text":"操作示意图","anchor":"操作示意图","htmlText":"操作示意图"},{"level":2,"text":"数据库三层结构","anchor":"数据库三层结构","htmlText":"数据库三层结构"},{"level":2,"text":"数据在数据库中的存储方式","anchor":"数据在数据库中的存储方式","htmlText":"数据在数据库中的存储方式"},{"level":2,"text":"SQL 语句分类","anchor":"sql-语句分类","htmlText":"SQL 语句分类"},{"level":2,"text":"创建数据库","anchor":"创建数据库","htmlText":"创建数据库"},{"level":2,"text":"查看、删除数据库","anchor":"查看删除数据库","htmlText":"查看、删除数据库"},{"level":2,"text":"备份恢复数据库","anchor":"备份恢复数据库","htmlText":"备份恢复数据库"},{"level":2,"text":"备份恢复数据库的表","anchor":"备份恢复数据库的表","htmlText":"备份恢复数据库的表"},{"level":2,"text":"创建表","anchor":"创建表","htmlText":"创建表"},{"level":2,"text":"Mysql 常用数据类型(列类型)","anchor":"mysql-常用数据类型列类型","htmlText":"Mysql 常用数据类型(列类型)"},{"level":3,"text":"数值型(整数)的基本使用","anchor":"数值型整数的基本使用","htmlText":"数值型(整数)的基本使用"},{"level":3,"text":"定义一个无符号的整数","anchor":"定义一个无符号的整数","htmlText":"定义一个无符号的整数"},{"level":3,"text":"数值型(bit)的使用","anchor":"数值型bit的使用","htmlText":"数值型(bit)的使用"},{"level":3,"text":"数值型(小数)的基本使用","anchor":"数值型小数的基本使用","htmlText":"数值型(小数)的基本使用"},{"level":3,"text":"字符串的基本使用","anchor":"字符串的基本使用","htmlText":"字符串的基本使用"},{"level":3,"text":"字符串使用细节","anchor":"字符串使用细节","htmlText":"字符串使用细节"},{"level":3,"text":"日期类型的基本使用","anchor":"日期类型的基本使用","htmlText":"日期类型的基本使用"},{"level":2,"text":"创建表练习","anchor":"创建表练习","htmlText":"创建表练习"},{"level":2,"text":"修改表-基本介绍","anchor":"修改表-基本介绍","htmlText":"修改表-基本介绍"},{"level":2,"text":"修改表-课堂练习","anchor":"修改表-课堂练习","htmlText":"修改表-课堂练习"},{"level":2,"text":"数据库C[create]R[read]U[update]D[delete]语句","anchor":"数据库ccreaterreaduupdateddelete语句","htmlText":"数据库C[create]R[read]U[update]D[delete]语句"},{"level":2,"text":"Insert 语句","anchor":"insert-语句","htmlText":"Insert 语句"},{"level":3,"text":"使用INSERT 语句向表中插入数据。","anchor":"使用insert-语句向表中插入数据","htmlText":"使用INSERT 语句向表中插入数据。"},{"level":3,"text":"细节说明","anchor":"细节说明","htmlText":"细节说明"},{"level":2,"text":"update 语句","anchor":"update-语句","htmlText":"update 语句"},{"level":3,"text":"使用 update 语句修改表中数据","anchor":"使用-update-语句修改表中数据","htmlText":"使用 update 语句修改表中数据"},{"level":3,"text":"基本使用","anchor":"基本使用","htmlText":"基本使用"},{"level":3,"text":"使用细节","anchor":"使用细节","htmlText":"使用细节"},{"level":2,"text":"delete 语句","anchor":"delete-语句","htmlText":"delete 语句"},{"level":3,"text":"使用delete 语句删除表中数据","anchor":"使用delete-语句删除表中数据","htmlText":"使用delete 语句删除表中数据"},{"level":3,"text":"使用细节","anchor":"使用细节-1","htmlText":"使用细节"},{"level":2,"text":"select 语句","anchor":"select-语句","htmlText":"select 语句"},{"level":3,"text":"基本语法","anchor":"基本语法","htmlText":"基本语法"},{"level":3,"text":"注意事项(创建测试表学生表)","anchor":"注意事项创建测试表学生表","htmlText":"注意事项(创建测试表学生表)"},{"level":3,"text":"练习","anchor":"练习","htmlText":"练习"},{"level":3,"text":"使用表达式对查询的列进行运算","anchor":"使用表达式对查询的列进行运算","htmlText":"使用表达式对查询的列进行运算"},{"level":3,"text":"在select 语句中可使用as 语句","anchor":"在select-语句中可使用as-语句","htmlText":"在select 语句中可使用as 语句"},{"level":3,"text":"练习","anchor":"练习-1","htmlText":"练习"},{"level":3,"text":"在where 子句中经常使用的运算符","anchor":"在where-子句中经常使用的运算符","htmlText":"在where 子句中经常使用的运算符"},{"level":3,"text":"使用where 子句，进行过滤查询","anchor":"使用where-子句进行过滤查询","htmlText":"使用where 子句，进行过滤查询"},{"level":3,"text":"使用order by 子句排序查询结果","anchor":"使用order-by-子句排序查询结果","htmlText":"使用order by 子句排序查询结果"},{"level":2,"text":"合计/统计函数","anchor":"合计统计函数","htmlText":"合计/统计函数"},{"level":3,"text":"count","anchor":"count","htmlText":"count"},{"level":3,"text":"sum","anchor":"sum","htmlText":"sum"},{"level":3,"text":"avg","anchor":"avg","htmlText":"avg"},{"level":3,"text":"max/min","anchor":"maxmin","htmlText":"max/min"},{"level":3,"text":"使用group by 子句对列进行分组","anchor":"使用group-by-子句对列进行分组","htmlText":"使用group by 子句对列进行分组"},{"level":3,"text":"使用having 子句对分组后的结果进行过滤","anchor":"使用having-子句对分组后的结果进行过滤","htmlText":"使用having 子句对分组后的结果进行过滤"},{"level":2,"text":"字符串相关函数","anchor":"字符串相关函数","htmlText":"字符串相关函数"},{"level":2,"text":"数学相关函数","anchor":"数学相关函数","htmlText":"数学相关函数"},{"level":2,"text":"时间日期相关函数","anchor":"时间日期相关函数","htmlText":"时间日期相关函数"},{"level":2,"text":"加密和系统函数","anchor":"加密和系统函数","htmlText":"加密和系统函数"},{"level":2,"text":"流程控制函数","anchor":"流程控制函数","htmlText":"流程控制函数"},{"level":2,"text":"mysql 表查询--加强","anchor":"mysql-表查询--加强","htmlText":"mysql 表查询--加强"},{"level":3,"text":"介绍","anchor":"介绍","htmlText":"介绍"},{"level":3,"text":"分页查询","anchor":"分页查询","htmlText":"分页查询"},{"level":3,"text":"使用分组函数和分组子句","anchor":"使用分组函数和分组子句","htmlText":"使用分组函数和分组子句"},{"level":3,"text":"数据分组的总结","anchor":"数据分组的总结","htmlText":"数据分组的总结"},{"level":2,"text":"mysql 多表查询","anchor":"mysql-多表查询","htmlText":"mysql 多表查询"},{"level":3,"text":"多表查询练习","anchor":"多表查询练习","htmlText":"多表查询练习"},{"level":3,"text":"自连接","anchor":"自连接","htmlText":"自连接"},{"level":2,"text":"mysql 表子查询","anchor":"mysql-表子查询","htmlText":"mysql 表子查询"},{"level":3,"text":"什么是子查询","anchor":"什么是子查询","htmlText":"什么是子查询"},{"level":3,"text":"单行子查询","anchor":"单行子查询","htmlText":"单行子查询"},{"level":3,"text":"多行子查询","anchor":"多行子查询","htmlText":"多行子查询"},{"level":3,"text":"子查询当做临时表使用","anchor":"子查询当做临时表使用","htmlText":"子查询当做临时表使用"},{"level":3,"text":"在多行子查询中使用 all 操作符","anchor":"在多行子查询中使用-all-操作符","htmlText":"在多行子查询中使用 all 操作符"},{"level":3,"text":"在多行子查询中使用 any 操作符","anchor":"在多行子查询中使用-any-操作符","htmlText":"在多行子查询中使用 any 操作符"},{"level":3,"text":"多列子查询","anchor":"多列子查询","htmlText":"多列子查询"},{"level":3,"text":"在from 子句中使用子查询","anchor":"在from-子句中使用子查询","htmlText":"在from 子句中使用子查询"},{"level":2,"text":"表复制","anchor":"表复制","htmlText":"表复制"},{"level":3,"text":"自我复制数据(蠕虫复制)","anchor":"自我复制数据蠕虫复制","htmlText":"自我复制数据(蠕虫复制)"},{"level":2,"text":"合并查询","anchor":"合并查询","htmlText":"合并查询"},{"level":3,"text":"介绍","anchor":"介绍-1","htmlText":"介绍"},{"level":2,"text":"mysql 表外连接","anchor":"mysql-表外连接","htmlText":"mysql 表外连接"},{"level":3,"text":"外连接","anchor":"外连接","htmlText":"外连接"},{"level":2,"text":"mysql 约束","anchor":"mysql-约束","htmlText":"mysql 约束"},{"level":3,"text":"基本介绍","anchor":"基本介绍","htmlText":"基本介绍"},{"level":3,"text":"primary key(主键)","anchor":"primary-key主键","htmlText":"primary key(主键)"},{"level":3,"text":"not null(非空)","anchor":"not-null非空","htmlText":"not null(非空)"},{"level":3,"text":"unique(唯一)","anchor":"unique唯一","htmlText":"unique(唯一)"},{"level":3,"text":"foreign key(外键)","anchor":"foreign-key外键","htmlText":"foreign key(外键)"},{"level":3,"text":"check","anchor":"check","htmlText":"check"},{"level":3,"text":"商店售货系统表设计案例","anchor":"商店售货系统表设计案例","htmlText":"商店售货系统表设计案例"},{"level":2,"text":"自增长","anchor":"自增长","htmlText":"自增长"},{"level":3,"text":"自增长基本介绍","anchor":"自增长基本介绍","htmlText":"自增长基本介绍"},{"level":3,"text":"自增长使用细节","anchor":"自增长使用细节","htmlText":"自增长使用细节"},{"level":2,"text":"mysql 索引","anchor":"mysql-索引","htmlText":"mysql 索引"},{"level":3,"text":"索引快速入门","anchor":"索引快速入门","htmlText":"索引快速入门"},{"level":3,"text":"索引的原理","anchor":"索引的原理","htmlText":"索引的原理"},{"level":3,"text":"索引的类","anchor":"索引的类","htmlText":"索引的类"},{"level":3,"text":"索引使用","anchor":"索引使用","htmlText":"索引使用"},{"level":3,"text":"哪些列上适合使用索引","anchor":"哪些列上适合使用索引","htmlText":"哪些列上适合使用索引"},{"level":2,"text":"mysql 事务","anchor":"mysql-事务","htmlText":"mysql 事务"},{"level":3,"text":"什么是事务","anchor":"什么是事务","htmlText":"什么是事务"},{"level":3,"text":"事务和锁","anchor":"事务和锁","htmlText":"事务和锁"},{"level":3,"text":"回退事务","anchor":"回退事务","htmlText":"回退事务"},{"level":3,"text":"提交事务","anchor":"提交事务","htmlText":"提交事务"},{"level":3,"text":"事务细节讨论","anchor":"事务细节讨论","htmlText":"事务细节讨论"},{"level":2,"text":"mysql 事务隔离级别","anchor":"mysql-事务隔离级别","htmlText":"mysql 事务隔离级别"},{"level":3,"text":"事务隔离级别介绍","anchor":"事务隔离级别介绍","htmlText":"事务隔离级别介绍"},{"level":3,"text":"查看事务隔离级别","anchor":"查看事务隔离级别","htmlText":"查看事务隔离级别"},{"level":3,"text":"事务隔离级别","anchor":"事务隔离级别","htmlText":"事务隔离级别"},{"level":3,"text":"mysql 的事务隔离级--案例","anchor":"mysql-的事务隔离级--案例","htmlText":"mysql 的事务隔离级--案例"},{"level":3,"text":"设置事务隔离级别","anchor":"设置事务隔离级别","htmlText":"设置事务隔离级别"},{"level":2,"text":"mysql 事务ACID","anchor":"mysql-事务acid","htmlText":"mysql 事务ACID"},{"level":3,"text":"事务的acid 特性","anchor":"事务的acid-特性","htmlText":"事务的acid 特性"},{"level":2,"text":"mysql 表类型和存储引擎","anchor":"mysql-表类型和存储引擎","htmlText":"mysql 表类型和存储引擎"},{"level":3,"text":"基本介绍","anchor":"基本介绍-1","htmlText":"基本介绍"},{"level":3,"text":"主要的存储引擎/表类型特点","anchor":"主要的存储引擎表类型特点","htmlText":"主要的存储引擎/表类型特点"},{"level":3,"text":"细节说明","anchor":"细节说明-1","htmlText":"细节说明"},{"level":3,"text":"三种存储引擎表使用案例","anchor":"三种存储引擎表使用案例","htmlText":"三种存储引擎表使用案例"},{"level":3,"text":"如何选择表的存储引擎","anchor":"如何选择表的存储引擎","htmlText":"如何选择表的存储引擎"},{"level":3,"text":"修改存储引擎","anchor":"修改存储引擎","htmlText":"修改存储引擎"},{"level":2,"text":"视图(view)","anchor":"视图view","htmlText":"视图(view)"},{"level":3,"text":"看一个需求","anchor":"看一个需求","htmlText":"看一个需求"},{"level":3,"text":"基本概念","anchor":"基本概念","htmlText":"基本概念"},{"level":3,"text":"视图的基本使用","anchor":"视图的基本使用","htmlText":"视图的基本使用"},{"level":3,"text":"视图细节讨论","anchor":"视图细节讨论","htmlText":"视图细节讨论"},{"level":3,"text":"视图最佳实践","anchor":"视图最佳实践","htmlText":"视图最佳实践"},{"level":3,"text":"视图课堂练习","anchor":"视图课堂练习","htmlText":"视图课堂练习"},{"level":2,"text":"Mysql 管理","anchor":"mysql-管理","htmlText":"Mysql 管理"},{"level":3,"text":"Mysql 用户","anchor":"mysql-用户","htmlText":"Mysql 用户"},{"level":3,"text":"创建用户","anchor":"创建用户","htmlText":"创建用户"},{"level":3,"text":"删除用户","anchor":"删除用户","htmlText":"删除用户"},{"level":3,"text":"用户修改密码","anchor":"用户修改密码","htmlText":"用户修改密码"},{"level":3,"text":"mysql 中的权限","anchor":"mysql-中的权限","htmlText":"mysql 中的权限"},{"level":3,"text":"给用户授权","anchor":"给用户授权","htmlText":"给用户授权"},{"level":3,"text":"回收用户授权","anchor":"回收用户授权","htmlText":"回收用户授权"},{"level":3,"text":"权限生效指令","anchor":"权限生效指令","htmlText":"权限生效指令"},{"level":3,"text":"课堂练习题","anchor":"课堂练习题","htmlText":"课堂练习题"},{"level":3,"text":"细节说明","anchor":"细节说明-2","htmlText":"细节说明"},{"level":2,"text":"本章作业","anchor":"本章作业","htmlText":"本章作业"}]},"issueTemplate":null,"discussionTemplate":null,"richText":null,"richTextTruncated":true,"renderedFileInfo":null,"symbols":{"timed_out":false,"not_analyzed":false,"symbols":[{"name":"第24章 零基础学MySQL","fully_qualified_name":"第24章 零基础学MySQL","kind":"section_1","ident_start":7069,"ident_end":7095,"extent_start":7067,"extent_end":121811,"ident_utf16":{"start":{"line_number":140,"utf16_col":2},"end":{"line_number":140,"utf16_col":16}},"extent_utf16":{"start":{"line_number":140,"utf16_col":0},"end":{"line_number":3812,"utf16_col":0}}},{"name":"解决之道","fully_qualified_name":"解决之道","kind":"section_2","ident_start":7102,"ident_end":7114,"extent_start":7099,"extent_end":7868,"ident_utf16":{"start":{"line_number":142,"utf16_col":3},"end":{"line_number":142,"utf16_col":7}},"extent_utf16":{"start":{"line_number":142,"utf16_col":0},"end":{"line_number":174,"utf16_col":0}}},{"name":"文件、数据库","fully_qualified_name":"文件、数据库","kind":"section_3","ident_start":7122,"ident_end":7140,"extent_start":7118,"extent_end":7374,"ident_utf16":{"start":{"line_number":144,"utf16_col":4},"end":{"line_number":144,"utf16_col":10}},"extent_utf16":{"start":{"line_number":144,"utf16_col":0},"end":{"line_number":150,"utf16_col":0}}},{"name":"MySQL 数据库的安装和配置","fully_qualified_name":"MySQL 数据库的安装和配置","kind":"section_3","ident_start":7378,"ident_end":7411,"extent_start":7374,"extent_end":7473,"ident_utf16":{"start":{"line_number":150,"utf16_col":4},"end":{"line_number":150,"utf16_col":19}},"extent_utf16":{"start":{"line_number":150,"utf16_col":0},"end":{"line_number":154,"utf16_col":0}}},{"name":"使用命令行窗口连接MYSQL 数据库","fully_qualified_name":"使用命令行窗口连接MYSQL 数据库","kind":"section_3","ident_start":7477,"ident_end":7519,"extent_start":7473,"extent_end":7676,"ident_utf16":{"start":{"line_number":154,"utf16_col":4},"end":{"line_number":154,"utf16_col":22}},"extent_utf16":{"start":{"line_number":154,"utf16_col":0},"end":{"line_number":164,"utf16_col":0}}},{"name":"操作示意图","fully_qualified_name":"操作示意图","kind":"section_3","ident_start":7680,"ident_end":7695,"extent_start":7676,"extent_end":7868,"ident_utf16":{"start":{"line_number":164,"utf16_col":4},"end":{"line_number":164,"utf16_col":9}},"extent_utf16":{"start":{"line_number":164,"utf16_col":0},"end":{"line_number":174,"utf16_col":0}}},{"name":"数据库三层结构","fully_qualified_name":"数据库三层结构","kind":"section_2","ident_start":7871,"ident_end":7892,"extent_start":7868,"extent_end":8328,"ident_utf16":{"start":{"line_number":174,"utf16_col":3},"end":{"line_number":174,"utf16_col":10}},"extent_utf16":{"start":{"line_number":174,"utf16_col":0},"end":{"line_number":182,"utf16_col":0}}},{"name":"数据在数据库中的存储方式","fully_qualified_name":"数据在数据库中的存储方式","kind":"section_2","ident_start":8331,"ident_end":8367,"extent_start":8328,"extent_end":8476,"ident_utf16":{"start":{"line_number":182,"utf16_col":3},"end":{"line_number":182,"utf16_col":15}},"extent_utf16":{"start":{"line_number":182,"utf16_col":0},"end":{"line_number":186,"utf16_col":0}}},{"name":"SQL 语句分类","fully_qualified_name":"SQL 语句分类","kind":"section_2","ident_start":8479,"ident_end":8495,"extent_start":8476,"extent_end":8728,"ident_utf16":{"start":{"line_number":186,"utf16_col":3},"end":{"line_number":186,"utf16_col":11}},"extent_utf16":{"start":{"line_number":186,"utf16_col":0},"end":{"line_number":196,"utf16_col":0}}},{"name":"创建数据库","fully_qualified_name":"创建数据库","kind":"section_2","ident_start":8731,"ident_end":8746,"extent_start":8728,"extent_end":9812,"ident_utf16":{"start":{"line_number":196,"utf16_col":3},"end":{"line_number":196,"utf16_col":8}},"extent_utf16":{"start":{"line_number":196,"utf16_col":0},"end":{"line_number":225,"utf16_col":0}}},{"name":"查看、删除数据库","fully_qualified_name":"查看、删除数据库","kind":"section_2","ident_start":9815,"ident_end":9839,"extent_start":9812,"extent_end":10514,"ident_utf16":{"start":{"line_number":225,"utf16_col":3},"end":{"line_number":225,"utf16_col":11}},"extent_utf16":{"start":{"line_number":225,"utf16_col":0},"end":{"line_number":257,"utf16_col":0}}},{"name":"备份恢复数据库","fully_qualified_name":"备份恢复数据库","kind":"section_2","ident_start":10517,"ident_end":10538,"extent_start":10514,"extent_end":11267,"ident_utf16":{"start":{"line_number":257,"utf16_col":3},"end":{"line_number":257,"utf16_col":10}},"extent_utf16":{"start":{"line_number":257,"utf16_col":0},"end":{"line_number":285,"utf16_col":0}}},{"name":"备份恢复数据库的表","fully_qualified_name":"备份恢复数据库的表","kind":"section_2","ident_start":11270,"ident_end":11297,"extent_start":11267,"extent_end":11413,"ident_utf16":{"start":{"line_number":285,"utf16_col":3},"end":{"line_number":285,"utf16_col":12}},"extent_utf16":{"start":{"line_number":285,"utf16_col":0},"end":{"line_number":293,"utf16_col":0}}},{"name":"创建表","fully_qualified_name":"创建表","kind":"section_2","ident_start":11416,"ident_end":11425,"extent_start":11413,"extent_end":12326,"ident_utf16":{"start":{"line_number":293,"utf16_col":3},"end":{"line_number":293,"utf16_col":6}},"extent_utf16":{"start":{"line_number":293,"utf16_col":0},"end":{"line_number":324,"utf16_col":0}}},{"name":"Mysql 常用数据类型(列类型)","fully_qualified_name":"Mysql 常用数据类型(列类型)","kind":"section_2","ident_start":12329,"ident_end":12364,"extent_start":12326,"extent_end":19308,"ident_utf16":{"start":{"line_number":324,"utf16_col":3},"end":{"line_number":324,"utf16_col":20}},"extent_utf16":{"start":{"line_number":324,"utf16_col":0},"end":{"line_number":535,"utf16_col":0}}},{"name":"数值型(整数)的基本使用","fully_qualified_name":"数值型(整数)的基本使用","kind":"section_3","ident_start":12687,"ident_end":12719,"extent_start":12683,"extent_end":13256,"ident_utf16":{"start":{"line_number":332,"utf16_col":4},"end":{"line_number":332,"utf16_col":16}},"extent_utf16":{"start":{"line_number":332,"utf16_col":0},"end":{"line_number":352,"utf16_col":0}}},{"name":"定义一个无符号的整数","fully_qualified_name":"定义一个无符号的整数","kind":"section_3","ident_start":13260,"ident_end":13290,"extent_start":13256,"extent_end":13447,"ident_utf16":{"start":{"line_number":352,"utf16_col":4},"end":{"line_number":352,"utf16_col":14}},"extent_utf16":{"start":{"line_number":352,"utf16_col":0},"end":{"line_number":359,"utf16_col":0}}},{"name":"数值型(bit)的使用","fully_qualified_name":"数值型(bit)的使用","kind":"section_3","ident_start":13451,"ident_end":13474,"extent_start":13447,"extent_end":14286,"ident_utf16":{"start":{"line_number":359,"utf16_col":4},"end":{"line_number":359,"utf16_col":15}},"extent_utf16":{"start":{"line_number":359,"utf16_col":0},"end":{"line_number":389,"utf16_col":0}}},{"name":"数值型(小数)的基本使用","fully_qualified_name":"数值型(小数)的基本使用","kind":"section_3","ident_start":14290,"ident_end":14322,"extent_start":14286,"extent_end":15355,"ident_utf16":{"start":{"line_number":389,"utf16_col":4},"end":{"line_number":389,"utf16_col":16}},"extent_utf16":{"start":{"line_number":389,"utf16_col":0},"end":{"line_number":425,"utf16_col":0}}},{"name":"字符串的基本使用","fully_qualified_name":"字符串的基本使用","kind":"section_3","ident_start":15359,"ident_end":15383,"extent_start":15355,"extent_end":16197,"ident_utf16":{"start":{"line_number":425,"utf16_col":4},"end":{"line_number":425,"utf16_col":12}},"extent_utf16":{"start":{"line_number":425,"utf16_col":0},"end":{"line_number":453,"utf16_col":0}}},{"name":"字符串使用细节","fully_qualified_name":"字符串使用细节","kind":"section_3","ident_start":16201,"ident_end":16222,"extent_start":16197,"extent_end":18240,"ident_utf16":{"start":{"line_number":453,"utf16_col":4},"end":{"line_number":453,"utf16_col":11}},"extent_utf16":{"start":{"line_number":453,"utf16_col":0},"end":{"line_number":501,"utf16_col":0}}},{"name":"日期类型的基本使用","fully_qualified_name":"日期类型的基本使用","kind":"section_3","ident_start":18244,"ident_end":18271,"extent_start":18240,"extent_end":19308,"ident_utf16":{"start":{"line_number":501,"utf16_col":4},"end":{"line_number":501,"utf16_col":13}},"extent_utf16":{"start":{"line_number":501,"utf16_col":0},"end":{"line_number":535,"utf16_col":0}}},{"name":"创建表练习","fully_qualified_name":"创建表练习","kind":"section_2","ident_start":19311,"ident_end":19326,"extent_start":19308,"extent_end":19990,"ident_utf16":{"start":{"line_number":535,"utf16_col":3},"end":{"line_number":535,"utf16_col":8}},"extent_utf16":{"start":{"line_number":535,"utf16_col":0},"end":{"line_number":566,"utf16_col":0}}},{"name":"修改表-基本介绍","fully_qualified_name":"修改表-基本介绍","kind":"section_2","ident_start":19993,"ident_end":20015,"extent_start":19990,"extent_end":20124,"ident_utf16":{"start":{"line_number":566,"utf16_col":3},"end":{"line_number":566,"utf16_col":11}},"extent_utf16":{"start":{"line_number":566,"utf16_col":0},"end":{"line_number":570,"utf16_col":0}}},{"name":"修改表-课堂练习","fully_qualified_name":"修改表-课堂练习","kind":"section_2","ident_start":20127,"ident_end":20149,"extent_start":20124,"extent_end":20924,"ident_utf16":{"start":{"line_number":570,"utf16_col":3},"end":{"line_number":570,"utf16_col":11}},"extent_utf16":{"start":{"line_number":570,"utf16_col":0},"end":{"line_number":597,"utf16_col":0}}},{"name":"数据库C[create]R[read]U[update]D[delete]语句","fully_qualified_name":"数据库C[create]R[read]U[update]D[delete]语句","kind":"section_2","ident_start":20927,"ident_end":20976,"extent_start":20924,"extent_end":21112,"ident_utf16":{"start":{"line_number":597,"utf16_col":3},"end":{"line_number":597,"utf16_col":42}},"extent_utf16":{"start":{"line_number":597,"utf16_col":0},"end":{"line_number":604,"utf16_col":0}}},{"name":"Insert 语句","fully_qualified_name":"Insert 语句","kind":"section_2","ident_start":21115,"ident_end":21128,"extent_start":21112,"extent_end":23793,"ident_utf16":{"start":{"line_number":604,"utf16_col":3},"end":{"line_number":604,"utf16_col":12}},"extent_utf16":{"start":{"line_number":604,"utf16_col":0},"end":{"line_number":670,"utf16_col":0}}},{"name":"使用INSERT 语句向表中插入数据。","fully_qualified_name":"使用INSERT 语句向表中插入数据。","kind":"section_3","ident_start":21136,"ident_end":21179,"extent_start":21132,"extent_end":21858,"ident_utf16":{"start":{"line_number":606,"utf16_col":4},"end":{"line_number":606,"utf16_col":23}},"extent_utf16":{"start":{"line_number":606,"utf16_col":0},"end":{"line_number":631,"utf16_col":0}}},{"name":"细节说明","fully_qualified_name":"细节说明","kind":"section_3","ident_start":21862,"ident_end":21874,"extent_start":21858,"extent_end":23793,"ident_utf16":{"start":{"line_number":631,"utf16_col":4},"end":{"line_number":631,"utf16_col":8}},"extent_utf16":{"start":{"line_number":631,"utf16_col":0},"end":{"line_number":670,"utf16_col":0}}},{"name":"update 语句","fully_qualified_name":"update 语句","kind":"section_2","ident_start":23796,"ident_end":23809,"extent_start":23793,"extent_end":25034,"ident_utf16":{"start":{"line_number":670,"utf16_col":3},"end":{"line_number":670,"utf16_col":12}},"extent_utf16":{"start":{"line_number":670,"utf16_col":0},"end":{"line_number":707,"utf16_col":0}}},{"name":"使用 update 语句修改表中数据","fully_qualified_name":"使用 update 语句修改表中数据","kind":"section_3","ident_start":23817,"ident_end":23855,"extent_start":23813,"extent_end":23964,"ident_utf16":{"start":{"line_number":672,"utf16_col":4},"end":{"line_number":672,"utf16_col":22}},"extent_utf16":{"start":{"line_number":672,"utf16_col":0},"end":{"line_number":676,"utf16_col":0}}},{"name":"基本使用","fully_qualified_name":"基本使用","kind":"section_3","ident_start":23968,"ident_end":23980,"extent_start":23964,"extent_end":24829,"ident_utf16":{"start":{"line_number":676,"utf16_col":4},"end":{"line_number":676,"utf16_col":8}},"extent_utf16":{"start":{"line_number":676,"utf16_col":0},"end":{"line_number":702,"utf16_col":0}}},{"name":"使用细节","fully_qualified_name":"使用细节","kind":"section_3","ident_start":24833,"ident_end":24845,"extent_start":24829,"extent_end":25034,"ident_utf16":{"start":{"line_number":702,"utf16_col":4},"end":{"line_number":702,"utf16_col":8}},"extent_utf16":{"start":{"line_number":702,"utf16_col":0},"end":{"line_number":707,"utf16_col":0}}},{"name":"delete 语句","fully_qualified_name":"delete 语句","kind":"section_2","ident_start":25037,"ident_end":25050,"extent_start":25034,"extent_end":26003,"ident_utf16":{"start":{"line_number":707,"utf16_col":3},"end":{"line_number":707,"utf16_col":12}},"extent_utf16":{"start":{"line_number":707,"utf16_col":0},"end":{"line_number":739,"utf16_col":0}}},{"name":"使用delete 语句删除表中数据","fully_qualified_name":"使用delete 语句删除表中数据","kind":"section_3","ident_start":25058,"ident_end":25095,"extent_start":25054,"extent_end":25721,"ident_utf16":{"start":{"line_number":709,"utf16_col":4},"end":{"line_number":709,"utf16_col":21}},"extent_utf16":{"start":{"line_number":709,"utf16_col":0},"end":{"line_number":733,"utf16_col":0}}},{"name":"使用细节","fully_qualified_name":"使用细节","kind":"section_3","ident_start":25725,"ident_end":25737,"extent_start":25721,"extent_end":26003,"ident_utf16":{"start":{"line_number":733,"utf16_col":4},"end":{"line_number":733,"utf16_col":8}},"extent_utf16":{"start":{"line_number":733,"utf16_col":0},"end":{"line_number":739,"utf16_col":0}}},{"name":"select 语句","fully_qualified_name":"select 语句","kind":"section_2","ident_start":26006,"ident_end":26019,"extent_start":26003,"extent_end":31158,"ident_utf16":{"start":{"line_number":739,"utf16_col":3},"end":{"line_number":739,"utf16_col":12}},"extent_utf16":{"start":{"line_number":739,"utf16_col":0},"end":{"line_number":886,"utf16_col":0}}},{"name":"基本语法","fully_qualified_name":"基本语法","kind":"section_3","ident_start":26027,"ident_end":26039,"extent_start":26023,"extent_end":26148,"ident_utf16":{"start":{"line_number":741,"utf16_col":4},"end":{"line_number":741,"utf16_col":8}},"extent_utf16":{"start":{"line_number":741,"utf16_col":0},"end":{"line_number":745,"utf16_col":0}}},{"name":"注意事项(创建测试表学生表)","fully_qualified_name":"注意事项(创建测试表学生表)","kind":"section_3","ident_start":26152,"ident_end":26190,"extent_start":26148,"extent_end":26402,"ident_utf16":{"start":{"line_number":745,"utf16_col":4},"end":{"line_number":745,"utf16_col":18}},"extent_utf16":{"start":{"line_number":745,"utf16_col":0},"end":{"line_number":753,"utf16_col":0}}},{"name":"练习","fully_qualified_name":"练习","kind":"section_3","ident_start":26406,"ident_end":26412,"extent_start":26402,"extent_end":27707,"ident_utf16":{"start":{"line_number":753,"utf16_col":4},"end":{"line_number":753,"utf16_col":6}},"extent_utf16":{"start":{"line_number":753,"utf16_col":0},"end":{"line_number":786,"utf16_col":0}}},{"name":"使用表达式对查询的列进行运算","fully_qualified_name":"使用表达式对查询的列进行运算","kind":"section_3","ident_start":27711,"ident_end":27753,"extent_start":27707,"extent_end":27862,"ident_utf16":{"start":{"line_number":786,"utf16_col":4},"end":{"line_number":786,"utf16_col":18}},"extent_utf16":{"start":{"line_number":786,"utf16_col":0},"end":{"line_number":790,"utf16_col":0}}},{"name":"在select 语句中可使用as 语句","fully_qualified_name":"在select 语句中可使用as 语句","kind":"section_3","ident_start":27866,"ident_end":27903,"extent_start":27862,"extent_end":28012,"ident_utf16":{"start":{"line_number":790,"utf16_col":4},"end":{"line_number":790,"utf16_col":23}},"extent_utf16":{"start":{"line_number":790,"utf16_col":0},"end":{"line_number":794,"utf16_col":0}}},{"name":"练习","fully_qualified_name":"练习","kind":"section_3","ident_start":28016,"ident_end":28022,"extent_start":28012,"extent_end":28495,"ident_utf16":{"start":{"line_number":794,"utf16_col":4},"end":{"line_number":794,"utf16_col":6}},"extent_utf16":{"start":{"line_number":794,"utf16_col":0},"end":{"line_number":810,"utf16_col":0}}},{"name":"在where 子句中经常使用的运算符","fully_qualified_name":"在where 子句中经常使用的运算符","kind":"section_3","ident_start":28499,"ident_end":28541,"extent_start":28495,"extent_end":28694,"ident_utf16":{"start":{"line_number":810,"utf16_col":4},"end":{"line_number":810,"utf16_col":22}},"extent_utf16":{"start":{"line_number":810,"utf16_col":0},"end":{"line_number":816,"utf16_col":0}}},{"name":"使用where 子句，进行过滤查询","fully_qualified_name":"使用where 子句，进行过滤查询","kind":"section_3","ident_start":28698,"ident_end":28737,"extent_start":28694,"extent_end":30289,"ident_utf16":{"start":{"line_number":816,"utf16_col":4},"end":{"line_number":816,"utf16_col":21}},"extent_utf16":{"start":{"line_number":816,"utf16_col":0},"end":{"line_number":863,"utf16_col":0}}},{"name":"使用order by 子句排序查询结果","fully_qualified_name":"使用order by 子句排序查询结果","kind":"section_3","ident_start":30293,"ident_end":30332,"extent_start":30289,"extent_end":31158,"ident_utf16":{"start":{"line_number":863,"utf16_col":4},"end":{"line_number":863,"utf16_col":23}},"extent_utf16":{"start":{"line_number":863,"utf16_col":0},"end":{"line_number":886,"utf16_col":0}}},{"name":"合计/统计函数","fully_qualified_name":"合计/统计函数","kind":"section_2","ident_start":31161,"ident_end":31180,"extent_start":31158,"extent_end":37590,"ident_utf16":{"start":{"line_number":886,"utf16_col":3},"end":{"line_number":886,"utf16_col":10}},"extent_utf16":{"start":{"line_number":886,"utf16_col":0},"end":{"line_number":1072,"utf16_col":0}}},{"name":"count","fully_qualified_name":"count","kind":"section_3","ident_start":31188,"ident_end":31193,"extent_start":31184,"extent_end":33111,"ident_utf16":{"start":{"line_number":888,"utf16_col":4},"end":{"line_number":888,"utf16_col":9}},"extent_utf16":{"start":{"line_number":888,"utf16_col":0},"end":{"line_number":945,"utf16_col":0}}},{"name":"sum","fully_qualified_name":"sum","kind":"section_3","ident_start":33115,"ident_end":33118,"extent_start":33111,"extent_end":33303,"ident_utf16":{"start":{"line_number":945,"utf16_col":4},"end":{"line_number":945,"utf16_col":7}},"extent_utf16":{"start":{"line_number":945,"utf16_col":0},"end":{"line_number":951,"utf16_col":0}}},{"name":"avg","fully_qualified_name":"avg","kind":"section_3","ident_start":33307,"ident_end":33310,"extent_start":33303,"extent_end":33476,"ident_utf16":{"start":{"line_number":951,"utf16_col":4},"end":{"line_number":951,"utf16_col":7}},"extent_utf16":{"start":{"line_number":951,"utf16_col":0},"end":{"line_number":957,"utf16_col":0}}},{"name":"max/min","fully_qualified_name":"max/min","kind":"section_3","ident_start":33480,"ident_end":33487,"extent_start":33476,"extent_end":33664,"ident_utf16":{"start":{"line_number":957,"utf16_col":4},"end":{"line_number":957,"utf16_col":11}},"extent_utf16":{"start":{"line_number":957,"utf16_col":0},"end":{"line_number":963,"utf16_col":0}}},{"name":"使用group by 子句对列进行分组","fully_qualified_name":"使用group by 子句对列进行分组","kind":"section_3","ident_start":33668,"ident_end":33707,"extent_start":33664,"extent_end":33816,"ident_utf16":{"start":{"line_number":963,"utf16_col":4},"end":{"line_number":963,"utf16_col":23}},"extent_utf16":{"start":{"line_number":963,"utf16_col":0},"end":{"line_number":967,"utf16_col":0}}},{"name":"使用having 子句对分组后的结果进行过滤","fully_qualified_name":"使用having 子句对分组后的结果进行过滤","kind":"section_3","ident_start":33820,"ident_end":33872,"extent_start":33816,"extent_end":37590,"ident_utf16":{"start":{"line_number":967,"utf16_col":4},"end":{"line_number":967,"utf16_col":26}},"extent_utf16":{"start":{"line_number":967,"utf16_col":0},"end":{"line_number":1072,"utf16_col":0}}},{"name":"字符串相关函数","fully_qualified_name":"字符串相关函数","kind":"section_2","ident_start":37593,"ident_end":37614,"extent_start":37590,"extent_end":39731,"ident_utf16":{"start":{"line_number":1072,"utf16_col":3},"end":{"line_number":1072,"utf16_col":10}},"extent_utf16":{"start":{"line_number":1072,"utf16_col":0},"end":{"line_number":1129,"utf16_col":0}}},{"name":"数学相关函数","fully_qualified_name":"数学相关函数","kind":"section_2","ident_start":39734,"ident_end":39752,"extent_start":39731,"extent_end":41315,"ident_utf16":{"start":{"line_number":1129,"utf16_col":3},"end":{"line_number":1129,"utf16_col":9}},"extent_utf16":{"start":{"line_number":1129,"utf16_col":0},"end":{"line_number":1172,"utf16_col":0}}},{"name":"时间日期相关函数","fully_qualified_name":"时间日期相关函数","kind":"section_2","ident_start":41318,"ident_end":41342,"extent_start":41315,"extent_end":43850,"ident_utf16":{"start":{"line_number":1172,"utf16_col":3},"end":{"line_number":1172,"utf16_col":11}},"extent_utf16":{"start":{"line_number":1172,"utf16_col":0},"end":{"line_number":1246,"utf16_col":0}}},{"name":"加密和系统函数","fully_qualified_name":"加密和系统函数","kind":"section_2","ident_start":43853,"ident_end":43874,"extent_start":43850,"extent_end":45298,"ident_utf16":{"start":{"line_number":1246,"utf16_col":3},"end":{"line_number":1246,"utf16_col":10}},"extent_utf16":{"start":{"line_number":1246,"utf16_col":0},"end":{"line_number":1288,"utf16_col":0}}},{"name":"流程控制函数","fully_qualified_name":"流程控制函数","kind":"section_2","ident_start":45301,"ident_end":45319,"extent_start":45298,"extent_end":46676,"ident_utf16":{"start":{"line_number":1288,"utf16_col":3},"end":{"line_number":1288,"utf16_col":9}},"extent_utf16":{"start":{"line_number":1288,"utf16_col":0},"end":{"line_number":1328,"utf16_col":0}}},{"name":"mysql 表查询--加强","fully_qualified_name":"mysql 表查询--加强","kind":"section_2","ident_start":46679,"ident_end":46702,"extent_start":46676,"extent_end":50085,"ident_utf16":{"start":{"line_number":1328,"utf16_col":3},"end":{"line_number":1328,"utf16_col":16}},"extent_utf16":{"start":{"line_number":1328,"utf16_col":0},"end":{"line_number":1451,"utf16_col":0}}},{"name":"介绍","fully_qualified_name":"介绍","kind":"section_3","ident_start":46710,"ident_end":46716,"extent_start":46706,"extent_end":47711,"ident_utf16":{"start":{"line_number":1330,"utf16_col":4},"end":{"line_number":1330,"utf16_col":6}},"extent_utf16":{"start":{"line_number":1330,"utf16_col":0},"end":{"line_number":1364,"utf16_col":0}}},{"name":"分页查询","fully_qualified_name":"分页查询","kind":"section_3","ident_start":47715,"ident_end":47727,"extent_start":47711,"extent_end":48520,"ident_utf16":{"start":{"line_number":1364,"utf16_col":4},"end":{"line_number":1364,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1364,"utf16_col":0},"end":{"line_number":1397,"utf16_col":0}}},{"name":"使用分组函数和分组子句","fully_qualified_name":"使用分组函数和分组子句","kind":"section_3","ident_start":48524,"ident_end":48557,"extent_start":48520,"extent_end":49822,"ident_utf16":{"start":{"line_number":1397,"utf16_col":4},"end":{"line_number":1397,"utf16_col":15}},"extent_utf16":{"start":{"line_number":1397,"utf16_col":0},"end":{"line_number":1445,"utf16_col":0}}},{"name":"数据分组的总结","fully_qualified_name":"数据分组的总结","kind":"section_3","ident_start":49826,"ident_end":49847,"extent_start":49822,"extent_end":50085,"ident_utf16":{"start":{"line_number":1445,"utf16_col":4},"end":{"line_number":1445,"utf16_col":11}},"extent_utf16":{"start":{"line_number":1445,"utf16_col":0},"end":{"line_number":1451,"utf16_col":0}}},{"name":"mysql 多表查询","fully_qualified_name":"mysql 多表查询","kind":"section_2","ident_start":50088,"ident_end":50106,"extent_start":50085,"extent_end":52226,"ident_utf16":{"start":{"line_number":1451,"utf16_col":3},"end":{"line_number":1451,"utf16_col":13}},"extent_utf16":{"start":{"line_number":1451,"utf16_col":0},"end":{"line_number":1514,"utf16_col":0}}},{"name":"多表查询练习","fully_qualified_name":"多表查询练习","kind":"section_3","ident_start":50114,"ident_end":50132,"extent_start":50110,"extent_end":51484,"ident_utf16":{"start":{"line_number":1453,"utf16_col":4},"end":{"line_number":1453,"utf16_col":10}},"extent_utf16":{"start":{"line_number":1453,"utf16_col":0},"end":{"line_number":1493,"utf16_col":0}}},{"name":"自连接","fully_qualified_name":"自连接","kind":"section_3","ident_start":51488,"ident_end":51497,"extent_start":51484,"extent_end":52226,"ident_utf16":{"start":{"line_number":1493,"utf16_col":4},"end":{"line_number":1493,"utf16_col":7}},"extent_utf16":{"start":{"line_number":1493,"utf16_col":0},"end":{"line_number":1514,"utf16_col":0}}},{"name":"mysql 表子查询","fully_qualified_name":"mysql 表子查询","kind":"section_2","ident_start":52229,"ident_end":52247,"extent_start":52226,"extent_end":59308,"ident_utf16":{"start":{"line_number":1514,"utf16_col":3},"end":{"line_number":1514,"utf16_col":13}},"extent_utf16":{"start":{"line_number":1514,"utf16_col":0},"end":{"line_number":1805,"utf16_col":0}}},{"name":"什么是子查询","fully_qualified_name":"什么是子查询","kind":"section_3","ident_start":52255,"ident_end":52273,"extent_start":52251,"extent_end":52360,"ident_utf16":{"start":{"line_number":1516,"utf16_col":4},"end":{"line_number":1516,"utf16_col":10}},"extent_utf16":{"start":{"line_number":1516,"utf16_col":0},"end":{"line_number":1520,"utf16_col":0}}},{"name":"单行子查询","fully_qualified_name":"单行子查询","kind":"section_3","ident_start":52364,"ident_end":52379,"extent_start":52360,"extent_end":52447,"ident_utf16":{"start":{"line_number":1520,"utf16_col":4},"end":{"line_number":1520,"utf16_col":9}},"extent_utf16":{"start":{"line_number":1520,"utf16_col":0},"end":{"line_number":1524,"utf16_col":0}}},{"name":"多行子查询","fully_qualified_name":"多行子查询","kind":"section_3","ident_start":52451,"ident_end":52466,"extent_start":52447,"extent_end":53414,"ident_utf16":{"start":{"line_number":1524,"utf16_col":4},"end":{"line_number":1524,"utf16_col":9}},"extent_utf16":{"start":{"line_number":1524,"utf16_col":0},"end":{"line_number":1570,"utf16_col":0}}},{"name":"子查询当做临时表使用","fully_qualified_name":"子查询当做临时表使用","kind":"section_3","ident_start":53418,"ident_end":53448,"extent_start":53414,"extent_end":55197,"ident_utf16":{"start":{"line_number":1570,"utf16_col":4},"end":{"line_number":1570,"utf16_col":14}},"extent_utf16":{"start":{"line_number":1570,"utf16_col":0},"end":{"line_number":1635,"utf16_col":0}}},{"name":"在多行子查询中使用 all 操作符","fully_qualified_name":"在多行子查询中使用 all 操作符","kind":"section_3","ident_start":55201,"ident_end":55242,"extent_start":55197,"extent_end":55246,"ident_utf16":{"start":{"line_number":1635,"utf16_col":4},"end":{"line_number":1635,"utf16_col":21}},"extent_utf16":{"start":{"line_number":1635,"utf16_col":0},"end":{"line_number":1637,"utf16_col":0}}},{"name":"在多行子查询中使用 any 操作符","fully_qualified_name":"在多行子查询中使用 any 操作符","kind":"section_3","ident_start":55250,"ident_end":55291,"extent_start":55246,"extent_end":56658,"ident_utf16":{"start":{"line_number":1637,"utf16_col":4},"end":{"line_number":1637,"utf16_col":21}},"extent_utf16":{"start":{"line_number":1637,"utf16_col":0},"end":{"line_number":1701,"utf16_col":0}}},{"name":"多列子查询","fully_qualified_name":"多列子查询","kind":"section_3","ident_start":56662,"ident_end":56677,"extent_start":56658,"extent_end":57584,"ident_utf16":{"start":{"line_number":1701,"utf16_col":4},"end":{"line_number":1701,"utf16_col":9}},"extent_utf16":{"start":{"line_number":1701,"utf16_col":0},"end":{"line_number":1741,"utf16_col":0}}},{"name":"在from 子句中使用子查询","fully_qualified_name":"在from 子句中使用子查询","kind":"section_3","ident_start":57588,"ident_end":57620,"extent_start":57584,"extent_end":59308,"ident_utf16":{"start":{"line_number":1741,"utf16_col":4},"end":{"line_number":1741,"utf16_col":18}},"extent_utf16":{"start":{"line_number":1741,"utf16_col":0},"end":{"line_number":1805,"utf16_col":0}}},{"name":"表复制","fully_qualified_name":"表复制","kind":"section_2","ident_start":59311,"ident_end":59320,"extent_start":59308,"extent_end":61216,"ident_utf16":{"start":{"line_number":1805,"utf16_col":3},"end":{"line_number":1805,"utf16_col":6}},"extent_utf16":{"start":{"line_number":1805,"utf16_col":0},"end":{"line_number":1872,"utf16_col":0}}},{"name":"自我复制数据(蠕虫复制)","fully_qualified_name":"自我复制数据(蠕虫复制)","kind":"section_3","ident_start":59328,"ident_end":59360,"extent_start":59324,"extent_end":61216,"ident_utf16":{"start":{"line_number":1807,"utf16_col":4},"end":{"line_number":1807,"utf16_col":16}},"extent_utf16":{"start":{"line_number":1807,"utf16_col":0},"end":{"line_number":1872,"utf16_col":0}}},{"name":"合并查询","fully_qualified_name":"合并查询","kind":"section_2","ident_start":61219,"ident_end":61231,"extent_start":61216,"extent_end":62082,"ident_utf16":{"start":{"line_number":1872,"utf16_col":3},"end":{"line_number":1872,"utf16_col":7}},"extent_utf16":{"start":{"line_number":1872,"utf16_col":0},"end":{"line_number":1897,"utf16_col":0}}},{"name":"介绍","fully_qualified_name":"介绍","kind":"section_3","ident_start":61239,"ident_end":61245,"extent_start":61235,"extent_end":62082,"ident_utf16":{"start":{"line_number":1874,"utf16_col":4},"end":{"line_number":1874,"utf16_col":6}},"extent_utf16":{"start":{"line_number":1874,"utf16_col":0},"end":{"line_number":1897,"utf16_col":0}}},{"name":"mysql 表外连接","fully_qualified_name":"mysql 表外连接","kind":"section_2","ident_start":62085,"ident_end":62103,"extent_start":62082,"extent_end":64780,"ident_utf16":{"start":{"line_number":1897,"utf16_col":3},"end":{"line_number":1897,"utf16_col":13}},"extent_utf16":{"start":{"line_number":1897,"utf16_col":0},"end":{"line_number":1990,"utf16_col":0}}},{"name":"外连接","fully_qualified_name":"外连接","kind":"section_3","ident_start":62428,"ident_end":62437,"extent_start":62424,"extent_end":64780,"ident_utf16":{"start":{"line_number":1901,"utf16_col":4},"end":{"line_number":1901,"utf16_col":7}},"extent_utf16":{"start":{"line_number":1901,"utf16_col":0},"end":{"line_number":1990,"utf16_col":0}}},{"name":"mysql 约束","fully_qualified_name":"mysql 约束","kind":"section_2","ident_start":64783,"ident_end":64795,"extent_start":64780,"extent_end":72723,"ident_utf16":{"start":{"line_number":1990,"utf16_col":3},"end":{"line_number":1990,"utf16_col":11}},"extent_utf16":{"start":{"line_number":1990,"utf16_col":0},"end":{"line_number":2251,"utf16_col":0}}},{"name":"基本介绍","fully_qualified_name":"基本介绍","kind":"section_3","ident_start":64803,"ident_end":64815,"extent_start":64799,"extent_end":64983,"ident_utf16":{"start":{"line_number":1992,"utf16_col":4},"end":{"line_number":1992,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1992,"utf16_col":0},"end":{"line_number":1996,"utf16_col":0}}},{"name":"primary key(主键)","fully_qualified_name":"primary key(主键)","kind":"section_3","ident_start":64987,"ident_end":65006,"extent_start":64983,"extent_end":67243,"ident_utf16":{"start":{"line_number":1996,"utf16_col":4},"end":{"line_number":1996,"utf16_col":19}},"extent_utf16":{"start":{"line_number":1996,"utf16_col":0},"end":{"line_number":2077,"utf16_col":0}}},{"name":"not null(非空)","fully_qualified_name":"not null(非空)","kind":"section_3","ident_start":67247,"ident_end":67263,"extent_start":67243,"extent_end":67396,"ident_utf16":{"start":{"line_number":2077,"utf16_col":4},"end":{"line_number":2077,"utf16_col":16}},"extent_utf16":{"start":{"line_number":2077,"utf16_col":0},"end":{"line_number":2083,"utf16_col":0}}},{"name":"unique(唯一)","fully_qualified_name":"unique(唯一)","kind":"section_3","ident_start":67400,"ident_end":67414,"extent_start":67396,"extent_end":68384,"ident_utf16":{"start":{"line_number":2083,"utf16_col":4},"end":{"line_number":2083,"utf16_col":14}},"extent_utf16":{"start":{"line_number":2083,"utf16_col":0},"end":{"line_number":2123,"utf16_col":0}}},{"name":"foreign key(外键)","fully_qualified_name":"foreign key(外键)","kind":"section_3","ident_start":68388,"ident_end":68407,"extent_start":68384,"extent_end":69809,"ident_utf16":{"start":{"line_number":2123,"utf16_col":4},"end":{"line_number":2123,"utf16_col":19}},"extent_utf16":{"start":{"line_number":2123,"utf16_col":0},"end":{"line_number":2172,"utf16_col":0}}},{"name":"check","fully_qualified_name":"check","kind":"section_3","ident_start":69813,"ident_end":69818,"extent_start":69809,"extent_end":70584,"ident_utf16":{"start":{"line_number":2172,"utf16_col":4},"end":{"line_number":2172,"utf16_col":9}},"extent_utf16":{"start":{"line_number":2172,"utf16_col":0},"end":{"line_number":2198,"utf16_col":0}}},{"name":"商店售货系统表设计案例","fully_qualified_name":"商店售货系统表设计案例","kind":"section_3","ident_start":70588,"ident_end":70621,"extent_start":70584,"extent_end":72723,"ident_utf16":{"start":{"line_number":2198,"utf16_col":4},"end":{"line_number":2198,"utf16_col":15}},"extent_utf16":{"start":{"line_number":2198,"utf16_col":0},"end":{"line_number":2251,"utf16_col":0}}},{"name":"自增长","fully_qualified_name":"自增长","kind":"section_2","ident_start":72726,"ident_end":72735,"extent_start":72723,"extent_end":75424,"ident_utf16":{"start":{"line_number":2251,"utf16_col":3},"end":{"line_number":2251,"utf16_col":6}},"extent_utf16":{"start":{"line_number":2251,"utf16_col":0},"end":{"line_number":2331,"utf16_col":0}}},{"name":"自增长基本介绍","fully_qualified_name":"自增长基本介绍","kind":"section_3","ident_start":72743,"ident_end":72764,"extent_start":72739,"extent_end":73007,"ident_utf16":{"start":{"line_number":2253,"utf16_col":4},"end":{"line_number":2253,"utf16_col":11}},"extent_utf16":{"start":{"line_number":2253,"utf16_col":0},"end":{"line_number":2259,"utf16_col":0}}},{"name":"自增长使用细节","fully_qualified_name":"自增长使用细节","kind":"section_3","ident_start":73011,"ident_end":73032,"extent_start":73007,"extent_end":75424,"ident_utf16":{"start":{"line_number":2259,"utf16_col":4},"end":{"line_number":2259,"utf16_col":11}},"extent_utf16":{"start":{"line_number":2259,"utf16_col":0},"end":{"line_number":2331,"utf16_col":0}}},{"name":"mysql 索引","fully_qualified_name":"mysql 索引","kind":"section_2","ident_start":75427,"ident_end":75439,"extent_start":75424,"extent_end":82328,"ident_utf16":{"start":{"line_number":2331,"utf16_col":3},"end":{"line_number":2331,"utf16_col":11}},"extent_utf16":{"start":{"line_number":2331,"utf16_col":0},"end":{"line_number":2592,"utf16_col":0}}},{"name":"索引快速入门","fully_qualified_name":"索引快速入门","kind":"section_3","ident_start":75447,"ident_end":75465,"extent_start":75443,"extent_end":79343,"ident_utf16":{"start":{"line_number":2333,"utf16_col":4},"end":{"line_number":2333,"utf16_col":10}},"extent_utf16":{"start":{"line_number":2333,"utf16_col":0},"end":{"line_number":2462,"utf16_col":0}}},{"name":"索引的原理","fully_qualified_name":"索引的原理","kind":"section_3","ident_start":79347,"ident_end":79362,"extent_start":79343,"extent_end":79672,"ident_utf16":{"start":{"line_number":2462,"utf16_col":4},"end":{"line_number":2462,"utf16_col":9}},"extent_utf16":{"start":{"line_number":2462,"utf16_col":0},"end":{"line_number":2471,"utf16_col":0}}},{"name":"索引的类","fully_qualified_name":"索引的类","kind":"section_3","ident_start":79676,"ident_end":79688,"extent_start":79672,"extent_end":80205,"ident_utf16":{"start":{"line_number":2471,"utf16_col":4},"end":{"line_number":2471,"utf16_col":8}},"extent_utf16":{"start":{"line_number":2471,"utf16_col":0},"end":{"line_number":2488,"utf16_col":0}}},{"name":"索引使用","fully_qualified_name":"索引使用","kind":"section_3","ident_start":80209,"ident_end":80221,"extent_start":80205,"extent_end":81837,"ident_utf16":{"start":{"line_number":2488,"utf16_col":4},"end":{"line_number":2488,"utf16_col":8}},"extent_utf16":{"start":{"line_number":2488,"utf16_col":0},"end":{"line_number":2570,"utf16_col":0}}},{"name":"哪些列上适合使用索引","fully_qualified_name":"哪些列上适合使用索引","kind":"section_3","ident_start":81841,"ident_end":81871,"extent_start":81837,"extent_end":82328,"ident_utf16":{"start":{"line_number":2570,"utf16_col":4},"end":{"line_number":2570,"utf16_col":14}},"extent_utf16":{"start":{"line_number":2570,"utf16_col":0},"end":{"line_number":2592,"utf16_col":0}}},{"name":"mysql 事务","fully_qualified_name":"mysql 事务","kind":"section_2","ident_start":82331,"ident_end":82343,"extent_start":82328,"extent_end":85845,"ident_utf16":{"start":{"line_number":2592,"utf16_col":3},"end":{"line_number":2592,"utf16_col":11}},"extent_utf16":{"start":{"line_number":2592,"utf16_col":0},"end":{"line_number":2683,"utf16_col":0}}},{"name":"什么是事务","fully_qualified_name":"什么是事务","kind":"section_3","ident_start":82351,"ident_end":82366,"extent_start":82347,"extent_end":83267,"ident_utf16":{"start":{"line_number":2594,"utf16_col":4},"end":{"line_number":2594,"utf16_col":9}},"extent_utf16":{"start":{"line_number":2594,"utf16_col":0},"end":{"line_number":2630,"utf16_col":0}}},{"name":"事务和锁","fully_qualified_name":"事务和锁","kind":"section_3","ident_start":83271,"ident_end":83283,"extent_start":83267,"extent_end":83720,"ident_utf16":{"start":{"line_number":2630,"utf16_col":4},"end":{"line_number":2630,"utf16_col":8}},"extent_utf16":{"start":{"line_number":2630,"utf16_col":0},"end":{"line_number":2642,"utf16_col":0}}},{"name":"回退事务","fully_qualified_name":"回退事务","kind":"section_3","ident_start":83724,"ident_end":83736,"extent_start":83720,"extent_end":84027,"ident_utf16":{"start":{"line_number":2642,"utf16_col":4},"end":{"line_number":2642,"utf16_col":8}},"extent_utf16":{"start":{"line_number":2642,"utf16_col":0},"end":{"line_number":2646,"utf16_col":0}}},{"name":"提交事务","fully_qualified_name":"提交事务","kind":"section_3","ident_start":84031,"ident_end":84043,"extent_start":84027,"extent_end":84348,"ident_utf16":{"start":{"line_number":2646,"utf16_col":4},"end":{"line_number":2646,"utf16_col":8}},"extent_utf16":{"start":{"line_number":2646,"utf16_col":0},"end":{"line_number":2650,"utf16_col":0}}},{"name":"事务细节讨论","fully_qualified_name":"事务细节讨论","kind":"section_3","ident_start":84352,"ident_end":84370,"extent_start":84348,"extent_end":85845,"ident_utf16":{"start":{"line_number":2650,"utf16_col":4},"end":{"line_number":2650,"utf16_col":10}},"extent_utf16":{"start":{"line_number":2650,"utf16_col":0},"end":{"line_number":2683,"utf16_col":0}}},{"name":"mysql 事务隔离级别","fully_qualified_name":"mysql 事务隔离级别","kind":"section_2","ident_start":85848,"ident_end":85872,"extent_start":85845,"extent_end":89024,"ident_utf16":{"start":{"line_number":2683,"utf16_col":3},"end":{"line_number":2683,"utf16_col":15}},"extent_utf16":{"start":{"line_number":2683,"utf16_col":0},"end":{"line_number":2785,"utf16_col":0}}},{"name":"事务隔离级别介绍","fully_qualified_name":"事务隔离级别介绍","kind":"section_3","ident_start":85880,"ident_end":85904,"extent_start":85876,"extent_end":86237,"ident_utf16":{"start":{"line_number":2685,"utf16_col":4},"end":{"line_number":2685,"utf16_col":12}},"extent_utf16":{"start":{"line_number":2685,"utf16_col":0},"end":{"line_number":2695,"utf16_col":0}}},{"name":"查看事务隔离级别","fully_qualified_name":"查看事务隔离级别","kind":"section_3","ident_start":86241,"ident_end":86265,"extent_start":86237,"extent_end":86806,"ident_utf16":{"start":{"line_number":2695,"utf16_col":4},"end":{"line_number":2695,"utf16_col":12}},"extent_utf16":{"start":{"line_number":2695,"utf16_col":0},"end":{"line_number":2701,"utf16_col":0}}},{"name":"事务隔离级别","fully_qualified_name":"事务隔离级别","kind":"section_3","ident_start":86810,"ident_end":86828,"extent_start":86806,"extent_end":87151,"ident_utf16":{"start":{"line_number":2701,"utf16_col":4},"end":{"line_number":2701,"utf16_col":10}},"extent_utf16":{"start":{"line_number":2701,"utf16_col":0},"end":{"line_number":2709,"utf16_col":0}}},{"name":"mysql 的事务隔离级--案例","fully_qualified_name":"mysql 的事务隔离级--案例","kind":"section_3","ident_start":87155,"ident_end":87187,"extent_start":87151,"extent_end":88146,"ident_utf16":{"start":{"line_number":2709,"utf16_col":4},"end":{"line_number":2709,"utf16_col":20}},"extent_utf16":{"start":{"line_number":2709,"utf16_col":0},"end":{"line_number":2748,"utf16_col":0}}},{"name":"设置事务隔离级别","fully_qualified_name":"设置事务隔离级别","kind":"section_3","ident_start":88150,"ident_end":88174,"extent_start":88146,"extent_end":89024,"ident_utf16":{"start":{"line_number":2748,"utf16_col":4},"end":{"line_number":2748,"utf16_col":12}},"extent_utf16":{"start":{"line_number":2748,"utf16_col":0},"end":{"line_number":2785,"utf16_col":0}}},{"name":"mysql 事务ACID","fully_qualified_name":"mysql 事务ACID","kind":"section_2","ident_start":89027,"ident_end":89043,"extent_start":89024,"extent_end":89767,"ident_utf16":{"start":{"line_number":2785,"utf16_col":3},"end":{"line_number":2785,"utf16_col":15}},"extent_utf16":{"start":{"line_number":2785,"utf16_col":0},"end":{"line_number":2798,"utf16_col":0}}},{"name":"事务的acid 特性","fully_qualified_name":"事务的acid 特性","kind":"section_3","ident_start":89051,"ident_end":89071,"extent_start":89047,"extent_end":89767,"ident_utf16":{"start":{"line_number":2787,"utf16_col":4},"end":{"line_number":2787,"utf16_col":14}},"extent_utf16":{"start":{"line_number":2787,"utf16_col":0},"end":{"line_number":2798,"utf16_col":0}}},{"name":"mysql 表类型和存储引擎","fully_qualified_name":"mysql 表类型和存储引擎","kind":"section_2","ident_start":89770,"ident_end":89800,"extent_start":89767,"extent_end":92825,"ident_utf16":{"start":{"line_number":2798,"utf16_col":3},"end":{"line_number":2798,"utf16_col":17}},"extent_utf16":{"start":{"line_number":2798,"utf16_col":0},"end":{"line_number":2880,"utf16_col":0}}},{"name":"基本介绍","fully_qualified_name":"基本介绍","kind":"section_3","ident_start":89808,"ident_end":89820,"extent_start":89804,"extent_end":90391,"ident_utf16":{"start":{"line_number":2800,"utf16_col":4},"end":{"line_number":2800,"utf16_col":8}},"extent_utf16":{"start":{"line_number":2800,"utf16_col":0},"end":{"line_number":2812,"utf16_col":0}}},{"name":"主要的存储引擎/表类型特点","fully_qualified_name":"主要的存储引擎/表类型特点","kind":"section_3","ident_start":90395,"ident_end":90432,"extent_start":90391,"extent_end":90541,"ident_utf16":{"start":{"line_number":2812,"utf16_col":4},"end":{"line_number":2812,"utf16_col":17}},"extent_utf16":{"start":{"line_number":2812,"utf16_col":0},"end":{"line_number":2816,"utf16_col":0}}},{"name":"细节说明","fully_qualified_name":"细节说明","kind":"section_3","ident_start":90545,"ident_end":90557,"extent_start":90541,"extent_end":91257,"ident_utf16":{"start":{"line_number":2816,"utf16_col":4},"end":{"line_number":2816,"utf16_col":8}},"extent_utf16":{"start":{"line_number":2816,"utf16_col":0},"end":{"line_number":2826,"utf16_col":0}}},{"name":"三种存储引擎表使用案例","fully_qualified_name":"三种存储引擎表使用案例","kind":"section_3","ident_start":91261,"ident_end":91294,"extent_start":91257,"extent_end":92195,"ident_utf16":{"start":{"line_number":2826,"utf16_col":4},"end":{"line_number":2826,"utf16_col":15}},"extent_utf16":{"start":{"line_number":2826,"utf16_col":0},"end":{"line_number":2864,"utf16_col":0}}},{"name":"如何选择表的存储引擎","fully_qualified_name":"如何选择表的存储引擎","kind":"section_3","ident_start":92199,"ident_end":92229,"extent_start":92195,"extent_end":92739,"ident_utf16":{"start":{"line_number":2864,"utf16_col":4},"end":{"line_number":2864,"utf16_col":14}},"extent_utf16":{"start":{"line_number":2864,"utf16_col":0},"end":{"line_number":2874,"utf16_col":0}}},{"name":"修改存储引擎","fully_qualified_name":"修改存储引擎","kind":"section_3","ident_start":92743,"ident_end":92761,"extent_start":92739,"extent_end":92825,"ident_utf16":{"start":{"line_number":2874,"utf16_col":4},"end":{"line_number":2874,"utf16_col":10}},"extent_utf16":{"start":{"line_number":2874,"utf16_col":0},"end":{"line_number":2880,"utf16_col":0}}},{"name":"视图(view)","fully_qualified_name":"视图(view)","kind":"section_2","ident_start":92828,"ident_end":92840,"extent_start":92825,"extent_end":96623,"ident_utf16":{"start":{"line_number":2880,"utf16_col":3},"end":{"line_number":2880,"utf16_col":11}},"extent_utf16":{"start":{"line_number":2880,"utf16_col":0},"end":{"line_number":2987,"utf16_col":0}}},{"name":"看一个需求","fully_qualified_name":"看一个需求","kind":"section_3","ident_start":92848,"ident_end":92863,"extent_start":92844,"extent_end":93076,"ident_utf16":{"start":{"line_number":2882,"utf16_col":4},"end":{"line_number":2882,"utf16_col":9}},"extent_utf16":{"start":{"line_number":2882,"utf16_col":0},"end":{"line_number":2886,"utf16_col":0}}},{"name":"基本概念","fully_qualified_name":"基本概念","kind":"section_3","ident_start":93080,"ident_end":93092,"extent_start":93076,"extent_end":93395,"ident_utf16":{"start":{"line_number":2886,"utf16_col":4},"end":{"line_number":2886,"utf16_col":8}},"extent_utf16":{"start":{"line_number":2886,"utf16_col":0},"end":{"line_number":2894,"utf16_col":0}}},{"name":"视图的基本使用","fully_qualified_name":"视图的基本使用","kind":"section_3","ident_start":93399,"ident_end":93420,"extent_start":93395,"extent_end":94786,"ident_utf16":{"start":{"line_number":2894,"utf16_col":4},"end":{"line_number":2894,"utf16_col":11}},"extent_utf16":{"start":{"line_number":2894,"utf16_col":0},"end":{"line_number":2954,"utf16_col":0}}},{"name":"视图细节讨论","fully_qualified_name":"视图细节讨论","kind":"section_3","ident_start":94790,"ident_end":94808,"extent_start":94786,"extent_end":95097,"ident_utf16":{"start":{"line_number":2954,"utf16_col":4},"end":{"line_number":2954,"utf16_col":10}},"extent_utf16":{"start":{"line_number":2954,"utf16_col":0},"end":{"line_number":2960,"utf16_col":0}}},{"name":"视图最佳实践","fully_qualified_name":"视图最佳实践","kind":"section_3","ident_start":95101,"ident_end":95119,"extent_start":95097,"extent_end":96052,"ident_utf16":{"start":{"line_number":2960,"utf16_col":4},"end":{"line_number":2960,"utf16_col":10}},"extent_utf16":{"start":{"line_number":2960,"utf16_col":0},"end":{"line_number":2966,"utf16_col":0}}},{"name":"视图课堂练习","fully_qualified_name":"视图课堂练习","kind":"section_3","ident_start":96056,"ident_end":96074,"extent_start":96052,"extent_end":96623,"ident_utf16":{"start":{"line_number":2966,"utf16_col":4},"end":{"line_number":2966,"utf16_col":10}},"extent_utf16":{"start":{"line_number":2966,"utf16_col":0},"end":{"line_number":2987,"utf16_col":0}}},{"name":"Mysql 管理","fully_qualified_name":"Mysql 管理","kind":"section_2","ident_start":96626,"ident_end":96638,"extent_start":96623,"extent_end":102019,"ident_utf16":{"start":{"line_number":2987,"utf16_col":3},"end":{"line_number":2987,"utf16_col":11}},"extent_utf16":{"start":{"line_number":2987,"utf16_col":0},"end":{"line_number":3184,"utf16_col":0}}},{"name":"Mysql 用户","fully_qualified_name":"Mysql 用户","kind":"section_3","ident_start":96646,"ident_end":96658,"extent_start":96642,"extent_end":97126,"ident_utf16":{"start":{"line_number":2989,"utf16_col":4},"end":{"line_number":2989,"utf16_col":12}},"extent_utf16":{"start":{"line_number":2989,"utf16_col":0},"end":{"line_number":3001,"utf16_col":0}}},{"name":"创建用户","fully_qualified_name":"创建用户","kind":"section_3","ident_start":97130,"ident_end":97142,"extent_start":97126,"extent_end":97274,"ident_utf16":{"start":{"line_number":3001,"utf16_col":4},"end":{"line_number":3001,"utf16_col":8}},"extent_utf16":{"start":{"line_number":3001,"utf16_col":0},"end":{"line_number":3009,"utf16_col":0}}},{"name":"删除用户","fully_qualified_name":"删除用户","kind":"section_3","ident_start":97278,"ident_end":97290,"extent_start":97274,"extent_end":97354,"ident_utf16":{"start":{"line_number":3009,"utf16_col":4},"end":{"line_number":3009,"utf16_col":8}},"extent_utf16":{"start":{"line_number":3009,"utf16_col":0},"end":{"line_number":3015,"utf16_col":0}}},{"name":"用户修改密码","fully_qualified_name":"用户修改密码","kind":"section_3","ident_start":97358,"ident_end":97376,"extent_start":97354,"extent_end":97598,"ident_utf16":{"start":{"line_number":3015,"utf16_col":4},"end":{"line_number":3015,"utf16_col":10}},"extent_utf16":{"start":{"line_number":3015,"utf16_col":0},"end":{"line_number":3029,"utf16_col":0}}},{"name":"mysql 中的权限","fully_qualified_name":"mysql 中的权限","kind":"section_3","ident_start":97602,"ident_end":97620,"extent_start":97598,"extent_end":97729,"ident_utf16":{"start":{"line_number":3029,"utf16_col":4},"end":{"line_number":3029,"utf16_col":14}},"extent_utf16":{"start":{"line_number":3029,"utf16_col":0},"end":{"line_number":3033,"utf16_col":0}}},{"name":"给用户授权","fully_qualified_name":"给用户授权","kind":"section_3","ident_start":97733,"ident_end":97748,"extent_start":97729,"extent_end":98484,"ident_utf16":{"start":{"line_number":3033,"utf16_col":4},"end":{"line_number":3033,"utf16_col":9}},"extent_utf16":{"start":{"line_number":3033,"utf16_col":0},"end":{"line_number":3062,"utf16_col":0}}},{"name":"回收用户授权","fully_qualified_name":"回收用户授权","kind":"section_3","ident_start":98488,"ident_end":98506,"extent_start":98484,"extent_end":98613,"ident_utf16":{"start":{"line_number":3062,"utf16_col":4},"end":{"line_number":3062,"utf16_col":10}},"extent_utf16":{"start":{"line_number":3062,"utf16_col":0},"end":{"line_number":3070,"utf16_col":0}}},{"name":"权限生效指令","fully_qualified_name":"权限生效指令","kind":"section_3","ident_start":98617,"ident_end":98635,"extent_start":98613,"extent_end":99640,"ident_utf16":{"start":{"line_number":3070,"utf16_col":4},"end":{"line_number":3070,"utf16_col":10}},"extent_utf16":{"start":{"line_number":3070,"utf16_col":0},"end":{"line_number":3101,"utf16_col":0}}},{"name":"课堂练习题","fully_qualified_name":"课堂练习题","kind":"section_3","ident_start":99644,"ident_end":99659,"extent_start":99640,"extent_end":101058,"ident_utf16":{"start":{"line_number":3101,"utf16_col":4},"end":{"line_number":3101,"utf16_col":9}},"extent_utf16":{"start":{"line_number":3101,"utf16_col":0},"end":{"line_number":3150,"utf16_col":0}}},{"name":"细节说明","fully_qualified_name":"细节说明","kind":"section_3","ident_start":101062,"ident_end":101074,"extent_start":101058,"extent_end":102019,"ident_utf16":{"start":{"line_number":3150,"utf16_col":4},"end":{"line_number":3150,"utf16_col":8}},"extent_utf16":{"start":{"line_number":3150,"utf16_col":0},"end":{"line_number":3184,"utf16_col":0}}},{"name":"本章作业","fully_qualified_name":"本章作业","kind":"section_2","ident_start":102022,"ident_end":102034,"extent_start":102019,"extent_end":121811,"ident_utf16":{"start":{"line_number":3184,"utf16_col":3},"end":{"line_number":3184,"utf16_col":7}},"extent_utf16":{"start":{"line_number":3184,"utf16_col":0},"end":{"line_number":3812,"utf16_col":0}}}]}},"codeViewLayoutRoute":{"repo":{"id":625897036,"defaultBranch":"main","name":"backend-tutorial","ownerLogin":"timerring","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2023-04-10T10:54:51.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/89397553?v=4","public":true,"private":false,"isOrgOwned":false,"isArchived":false},"currentUser":null,"uploadToken":"0mvzvSxqs1DbmdDSrZR6Bf-gGsaHpwQUFZMxYjLgZkRiiIqv8ahjjPJ9WxX6GAQU8NTmoDCGBMCGwsWgcI6MrA","allShortcutsEnabled":false,"treeExpanded":true,"path":"java-tutorial/ch24_MySQL_basic.md","symbolsExpanded":false,"refInfo":{"name":"main","listCacheKey":"v0:1681124092.0","canEdit":false,"currentOid":"75524f6ac554afe80f015163796026ed06e79aba"},"helpUrl":"https://docs.github.com","githubDevUrl":null},"codeViewFileTreeLayoutRoute":{"fileTree":{"java-tutorial":{"items":[{"name":"ch02_java_overview.md","path":"java-tutorial/ch02_java_overview.md","contentType":"file"},{"name":"ch03_variable.md","path":"java-tutorial/ch03_variable.md","contentType":"file"},{"name":"ch04_operator.md","path":"java-tutorial/ch04_operator.md","contentType":"file"},{"name":"ch05_program_control_structure.md","path":"java-tutorial/ch05_program_control_structure.md","contentType":"file"},{"name":"ch06_arrays_sort_and_search.md","path":"java-tutorial/ch06_arrays_sort_and_search.md","contentType":"file"},{"name":"ch07_oop_fundamentals.md","path":"java-tutorial/ch07_oop_fundamentals.md","contentType":"file"},{"name":"ch08_opp_intermediate.md","path":"java-tutorial/ch08_opp_intermediate.md","contentType":"file"},{"name":"ch09_house_rental_system.md","path":"java-tutorial/ch09_house_rental_system.md","contentType":"file"},{"name":"ch10_oop_advanced.md","path":"java-tutorial/ch10_oop_advanced.md","contentType":"file"},{"name":"ch11_enum_and_annotation.md","path":"java-tutorial/ch11_enum_and_annotation.md","contentType":"file"},{"name":"ch12_exception.md","path":"java-tutorial/ch12_exception.md","contentType":"file"},{"name":"ch13_common_class.md","path":"java-tutorial/ch13_common_class.md","contentType":"file"},{"name":"ch14_collection_and_map.md","path":"java-tutorial/ch14_collection_and_map.md","contentType":"file"},{"name":"ch15_generics.md","path":"java-tutorial/ch15_generics.md","contentType":"file"},{"name":"ch16_tank_battle1.md","path":"java-tutorial/ch16_tank_battle1.md","contentType":"file"},{"name":"ch17_multithreading_basics.md","path":"java-tutorial/ch17_multithreading_basics.md","contentType":"file"},{"name":"ch18_tank_battle2.md","path":"java-tutorial/ch18_tank_battle2.md","contentType":"file"},{"name":"ch19_IO_stream.md","path":"java-tutorial/ch19_IO_stream.md","contentType":"file"},{"name":"ch20_tank_battle3.md","path":"java-tutorial/ch20_tank_battle3.md","contentType":"file"},{"name":"ch21_network_programming.md","path":"java-tutorial/ch21_network_programming.md","contentType":"file"},{"name":"ch22_multi-user_instant_messaging_system.md","path":"java-tutorial/ch22_multi-user_instant_messaging_system.md","contentType":"file"},{"name":"ch23_reflection.md","path":"java-tutorial/ch23_reflection.md","contentType":"file"},{"name":"ch24_MySQL_basic.md","path":"java-tutorial/ch24_MySQL_basic.md","contentType":"file"},{"name":"ch25_jdbc_and_database_connection_pools.md","path":"java-tutorial/ch25_jdbc_and_database_connection_pools.md","contentType":"file"},{"name":"ch26_man_han_lou.md","path":"java-tutorial/ch26_man_han_lou.md","contentType":"file"},{"name":"ch27_regular_expressions.md","path":"java-tutorial/ch27_regular_expressions.md","contentType":"file"},{"name":"ch28_the_knight_tour_problem.md","path":"java-tutorial/ch28_the_knight_tour_problem.md","contentType":"file"}],"totalCount":27},"":{"items":[{"name":"api","path":"api","contentType":"directory"},{"name":"code","path":"code","contentType":"directory"},{"name":"docker-tutorial","path":"docker-tutorial","contentType":"directory"},{"name":"java-tutorial","path":"java-tutorial","contentType":"directory"},{"name":"reference","path":"reference","contentType":"directory"},{"name":"resources","path":"resources","contentType":"directory"},{"name":"LICENSE","path":"LICENSE","contentType":"file"},{"name":"README.md","path":"README.md","contentType":"file"}],"totalCount":8}},"fileTreeProcessingTime":76.013132,"foldersToFetch":[]},"codeViewBlobLayoutRoute":{"codeLineWrapEnabled":false,"refInfo":{"name":"main","listCacheKey":"v0:1681124092.0","canEdit":false,"refType":"branch","currentOid":"75524f6ac554afe80f015163796026ed06e79aba","canEditOnDefaultBranch":false,"fileExistsOnDefault":true},"path":"java-tutorial/ch24_MySQL_basic.md","blob":{"copilotSWEAgentEnabled":false,"dependabotInfo":{"showConfigurationBanner":false,"configFilePath":null,"networkDependabotPath":"/timerring/backend-tutorial/network/updates","dismissConfigurationNoticePath":"/settings/dismiss-notice/dependabot_configuration_notice","configurationNoticeDismissed":null},"displayName":"ch24_MySQL_basic.md","displayUrl":"https://github.com/timerring/backend-tutorial/blob/main/java-tutorial/ch24_MySQL_basic.md?raw=true","headerInfo":{"blobSize":"119 KB","deleteTooltip":"You must be signed in to make or propose changes","editTooltip":"You must be signed in to make or propose changes","ghDesktopPath":"https://desktop.github.com","isGitLfs":false,"onBranch":true,"shortPath":"b4fe070","siteNavLoginPath":"/login?return_to=https%3A%2F%2Fgithub.com%2Ftimerring%2Fbackend-tutorial%2Fblob%2Fmain%2Fjava-tutorial%2Fch24_MySQL_basic.md","isCSV":false,"isRichtext":true,"lineInfo":{"truncatedLoc":"3812","truncatedSloc":"2921"},"mode":"file"},"image":false,"isCodeownersFile":null,"isPlain":false,"isValidLegacyIssueTemplate":false,"isIssueTemplate":false,"isDiscussionTemplate":false,"language":"Markdown","languageID":222,"large":false,"planSupportInfo":{"repoIsFork":null,"repoOwnedByCurrentUser":null,"requestFullPath":"/timerring/backend-tutorial/blob/main/java-tutorial/ch24_MySQL_basic.md","showFreeOrgGatedFeatureMessage":null,"showPlanSupportBanner":null,"upgradeDataAttributes":null,"upgradePath":null},"publishBannersInfo":{"dismissActionNoticePath":"/settings/dismiss-notice/publish_action_from_dockerfile","releasePath":"/timerring/backend-tutorial/releases/new?marketplace=true","showPublishActionBanner":false},"rawBlobUrl":"https://github.com/timerring/backend-tutorial/raw/refs/heads/main/java-tutorial/ch24_MySQL_basic.md","renderImageOrRaw":false,"shortPath":null,"symbolsEnabled":true,"tabSize":4,"topBannersInfo":{"overridingGlobalFundingFile":false,"globalPreferredFundingPath":null,"showInvalidCitationWarning":false,"citationHelpUrl":"https://docs.github.com/github/creating-cloning-and-archiving-repositories/creating-a-repository-on-github/about-citation-files","actionsOnboardingTip":null},"truncated":false,"viewable":true,"workflowRedirectUrl":null},"copilotInfo":null,"copilotAccessAllowed":false,"copilotSpacesEnabled":false,"modelsAccessAllowed":false,"modelsRepoIntegrationEnabled":false,"isMarketplaceEnabled":true},"codeViewBlobLayoutRoute.StyledBlob":{"rawLines":["- [第24章 零基础学MySQL](#第24章-零基础学mysql)\r","\t- [解决之道](#解决之道)\r","\t\t- [文件、数据库](#文件数据库)\r","\t\t- [MySQL 数据库的安装和配置](#mysql-数据库的安装和配置)\r","\t\t- [使用命令行窗口连接MYSQL 数据库](#使用命令行窗口连接mysql-数据库)\r","\t\t- [操作示意图](#操作示意图)\r","\t- [数据库三层结构](#数据库三层结构)\r","\t- [数据在数据库中的存储方式](#数据在数据库中的存储方式)\r","\t- [SQL 语句分类](#sql-语句分类)\r","\t- [创建数据库](#创建数据库)\r","\t- [查看、删除数据库](#查看删除数据库)\r","\t- [备份恢复数据库](#备份恢复数据库)\r","\t- [备份恢复数据库的表](#备份恢复数据库的表)\r","\t- [创建表](#创建表)\r","\t- [Mysql 常用数据类型(列类型)](#mysql-常用数据类型列类型)\r","\t\t- [数值型(整数)的基本使用](#数值型整数的基本使用)\r","\t\t- [定义一个无符号的整数](#定义一个无符号的整数)\r","\t\t- [数值型(bit)的使用](#数值型bit的使用)\r","\t\t- [数值型(小数)的基本使用](#数值型小数的基本使用)\r","\t\t- [字符串的基本使用](#字符串的基本使用)\r","\t\t- [字符串使用细节](#字符串使用细节)\r","\t\t- [日期类型的基本使用](#日期类型的基本使用)\r","\t- [创建表练习](#创建表练习)\r","\t- [修改表-基本介绍](#修改表-基本介绍)\r","\t- [修改表-课堂练习](#修改表-课堂练习)\r","\t- [数据库C[create]R[read]U[update]D[delete]语句](#数据库ccreaterreaduupdateddelete语句)\r","\t- [Insert 语句](#insert-语句)\r","\t\t- [使用INSERT 语句向表中插入数据。](#使用insert-语句向表中插入数据)\r","\t\t- [细节说明](#细节说明)\r","\t- [update 语句](#update-语句)\r","\t\t- [使用 update 语句修改表中数据](#使用-update-语句修改表中数据)\r","\t\t- [基本使用](#基本使用)\r","\t\t- [使用细节](#使用细节)\r","\t- [delete 语句](#delete-语句)\r","\t\t- [使用delete 语句删除表中数据](#使用delete-语句删除表中数据)\r","\t\t- [使用细节](#使用细节-1)\r","\t- [select 语句](#select-语句)\r","\t\t- [基本语法](#基本语法)\r","\t\t- [注意事项(创建测试表学生表)](#注意事项创建测试表学生表)\r","\t\t- [练习](#练习)\r","\t\t- [使用表达式对查询的列进行运算](#使用表达式对查询的列进行运算)\r","\t\t- [在select 语句中可使用as 语句](#在select-语句中可使用as-语句)\r","\t\t- [练习](#练习-1)\r","\t\t- [在where 子句中经常使用的运算符](#在where-子句中经常使用的运算符)\r","\t\t- [使用where 子句，进行过滤查询](#使用where-子句进行过滤查询)\r","\t\t- [使用order by 子句排序查询结果](#使用order-by-子句排序查询结果)\r","\t- [合计/统计函数](#合计统计函数)\r","\t\t- [count](#count)\r","\t\t- [sum](#sum)\r","\t\t- [avg](#avg)\r","\t\t- [max/min](#maxmin)\r","\t\t- [使用group by 子句对列进行分组](#使用group-by-子句对列进行分组)\r","\t\t- [使用having 子句对分组后的结果进行过滤](#使用having-子句对分组后的结果进行过滤)\r","\t- [字符串相关函数](#字符串相关函数)\r","\t- [数学相关函数](#数学相关函数)\r","\t- [时间日期相关函数](#时间日期相关函数)\r","\t- [加密和系统函数](#加密和系统函数)\r","\t- [流程控制函数](#流程控制函数)\r","\t- [mysql 表查询--加强](#mysql-表查询--加强)\r","\t\t- [介绍](#介绍)\r","\t\t- [分页查询](#分页查询)\r","\t\t- [使用分组函数和分组子句](#使用分组函数和分组子句)\r","\t\t- [数据分组的总结](#数据分组的总结)\r","\t- [mysql 多表查询](#mysql-多表查询)\r","\t\t- [多表查询练习](#多表查询练习)\r","\t\t- [自连接](#自连接)\r","\t- [mysql 表子查询](#mysql-表子查询)\r","\t\t- [什么是子查询](#什么是子查询)\r","\t\t- [单行子查询](#单行子查询)\r","\t\t- [多行子查询](#多行子查询)\r","\t\t- [子查询当做临时表使用](#子查询当做临时表使用)\r","\t\t- [在多行子查询中使用 all 操作符](#在多行子查询中使用-all-操作符)\r","\t\t- [在多行子查询中使用 any 操作符](#在多行子查询中使用-any-操作符)\r","\t\t- [多列子查询](#多列子查询)\r","\t\t- [在from 子句中使用子查询](#在from-子句中使用子查询)\r","\t- [表复制](#表复制)\r","\t\t- [自我复制数据(蠕虫复制)](#自我复制数据蠕虫复制)\r","\t- [合并查询](#合并查询)\r","\t\t- [介绍](#介绍-1)\r","\t- [mysql 表外连接](#mysql-表外连接)\r","\t\t- [外连接](#外连接)\r","\t- [mysql 约束](#mysql-约束)\r","\t\t- [基本介绍](#基本介绍)\r","\t\t- [primary key(主键)](#primary-key主键)\r","\t\t- [not null(非空)](#not-null非空)\r","\t\t- [unique(唯一)](#unique唯一)\r","\t\t- [foreign key(外键)](#foreign-key外键)\r","\t\t- [check](#check)\r","\t\t- [商店售货系统表设计案例](#商店售货系统表设计案例)\r","\t- [自增长](#自增长)\r","\t\t- [自增长基本介绍](#自增长基本介绍)\r","\t\t- [自增长使用细节](#自增长使用细节)\r","\t- [mysql 索引](#mysql-索引)\r","\t\t- [索引快速入门](#索引快速入门)\r","\t\t- [索引的原理](#索引的原理)\r","\t\t- [索引的类](#索引的类)\r","\t\t- [索引使用](#索引使用)\r","\t\t- [哪些列上适合使用索引](#哪些列上适合使用索引)\r","\t- [mysql 事务](#mysql-事务)\r","\t\t- [什么是事务](#什么是事务)\r","\t\t- [事务和锁](#事务和锁)\r","\t\t- [回退事务](#回退事务)\r","\t\t- [提交事务](#提交事务)\r","\t\t- [事务细节讨论](#事务细节讨论)\r","\t- [mysql 事务隔离级别](#mysql-事务隔离级别)\r","\t\t- [事务隔离级别介绍](#事务隔离级别介绍)\r","\t\t- [查看事务隔离级别](#查看事务隔离级别)\r","\t\t- [事务隔离级别](#事务隔离级别)\r","\t\t- [mysql 的事务隔离级--案例](#mysql-的事务隔离级--案例)\r","\t\t- [设置事务隔离级别](#设置事务隔离级别)\r","\t- [mysql 事务ACID](#mysql-事务acid)\r","\t\t- [事务的acid 特性](#事务的acid-特性)\r","\t- [mysql 表类型和存储引擎](#mysql-表类型和存储引擎)\r","\t\t- [基本介绍](#基本介绍-1)\r","\t\t- [主要的存储引擎/表类型特点](#主要的存储引擎表类型特点)\r","\t\t- [细节说明](#细节说明-1)\r","\t\t- [三种存储引擎表使用案例](#三种存储引擎表使用案例)\r","\t\t- [如何选择表的存储引擎](#如何选择表的存储引擎)\r","\t\t- [修改存储引擎](#修改存储引擎)\r","\t- [视图(view)](#视图view)\r","\t\t- [看一个需求](#看一个需求)\r","\t\t- [基本概念](#基本概念)\r","\t\t- [视图的基本使用](#视图的基本使用)\r","\t\t- [视图细节讨论](#视图细节讨论)\r","\t\t- [视图最佳实践](#视图最佳实践)\r","\t\t- [视图课堂练习](#视图课堂练习)\r","\t- [Mysql 管理](#mysql-管理)\r","\t\t- [Mysql 用户](#mysql-用户)\r","\t\t- [创建用户](#创建用户)\r","\t\t- [删除用户](#删除用户)\r","\t\t- [用户修改密码](#用户修改密码)\r","\t\t- [mysql 中的权限](#mysql-中的权限)\r","\t\t- [给用户授权](#给用户授权)\r","\t\t- [回收用户授权](#回收用户授权)\r","\t\t- [权限生效指令](#权限生效指令)\r","\t\t- [课堂练习题](#课堂练习题)\r","\t\t- [细节说明](#细节说明-2)\r","\t- [本章作业](#本章作业)\r","\r","\r","# 第24章 零基础学MySQL\r","\r","## 解决之道\r","\r","### 文件、数据库\r","\r","为了解决上述问题,使用更加利于管理数据的东东-数据库，它能更有效的管理数据。\r","\r","举一个生活化的案例说明：如果说图书馆是保存书籍的,那么数据库就是保存数据的。\r","\r","### MySQL 数据库的安装和配置\r","\r","mysql5.5 mysql5.6 mysqI5.7(稳定) mysql8 更高版本\r","\r","### 使用命令行窗口连接MYSQL 数据库\r","\r","1. mysql -h主机名-P端口-u用户名-p密码\r","\r","2. 登录前，保证服务启动\r","\r","   `net stop mysql服务名`\r","\r","   `net start mysql服务名`\r","\r","### 操作示意图\r","\r","![](https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/image-20230510145557744.png)\r","\r","+ Navicat\r","\r","介绍: 图形化MySQL 管理软件\r","\r","+ SQLyog\r","\r","## 数据库三层结构\r","\r","1. 所谓安装Mysql数据库，就是在主机安装一个数据库管理系统(DBMS)，这个管理程序可以管理多个数据库。DBMS(database manage system)。\r","2. 一个数据库中可以创建多个表,以保存数据(信息)。\r","3. 数据库管理系统(DBMS)、数据库和表的关系如图所示;示意图。\r","\r","![](https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/image-20230510152615349.png)\r","\r","## 数据在数据库中的存储方式\r","\r","![](https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/image-20230510152633583.png)\r","\r","## SQL 语句分类\r","\r","DDL:数据定义语句[create表，库...]\r","\r","DML:数据操作语句[增加insert，修改update，删除 delete]\r","\r","DQL:数据查询语句[select ]\r","\r","DCL:数据控制语句[管理数据库: 比如用户权限 grant revoke ]\r","\r","## 创建数据库\r","\r","![](https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/image-20230510154330331.png)\r","\r","1. CHARACTER SET:指定数据库采用的字符集，如果不指定字符集，默认utf8\r","1. COLLATE:指定数据库字符集的校对规则(常用的utf8 bin[区分大小写]\r","utf8_general_ci[不区分大小写] 注意默认是 utf8 general_ci )\r","\r","```sql\r","# 演示数据库的操作\r","#创建一个名称为db01的数据库。[图形化和指令 演示]\r","\r","#使用指令创建数据库\r","CREATE DATABASE db01;\r","#删除数据库指令\r","DROP DATABASE db01\r","#创建一个使用utf8字符集的hsp_db02数据库\r","CREATE DATABASE db02 CHARACTER SET utf8\r","#创建一个使用utf8字符集，并带校对规则的hsp_db03数据库\r","CREATE DATABASE db03 CHARACTER SET utf8 COLLATE utf8_bin\r","#校对规则 utf8_bin 区分大小 默认utf8_general_ci 不区分大小写\r","\r","#下面是一条查询的sql , select 查询 * 表示所有字段 FROM 从哪个表\r","#WHERE 从哪个字段 NAME = 'tom' 查询名字是tom\r","SELECT *  \r","\tFROM t1 \r","\tWHERE NAME = 'tom'\r","```\r","\r","## 查看、删除数据库\r","\r","显示数据库语句:\r","\r","```sql\r","SHOW DATABASES\r","```\r","\r","显示数据库创建语句:\r","\r","```sql\r","SHOW CREATE DATABASE db_name\r","```\r","\r","数据库删除语句[一定要慎用]:\r","\r","```sql\r","DROP DATABASE [IF EXISTS] db_ name\r","```\r","\r","```sql\r","#演示删除和查询数据库\r","#查看当前数据库服务器中的所有数据库\r","SHOW DATABASES\r","#查看前面创建的hsp_db01数据库的定义信息\r","SHOW CREATE DATABASE `hsp_db01`\r","#在创建数据库,表的时候，为了规避关键字，可以使用反引号解决，比如有数据库的名称就叫做CREATE，那么就需要使用` `解决。\r","\r","#删除前面创建的hsp_db01数据库\r","DROP DATABASE hsp_db01\r","```\r","\r","## 备份恢复数据库\r","\r","备份数据库(注意:在DOS执行)命令行\r","\r","```sql\r","mysqldump -u 用户名 -p -B 数据库1 数据库2 数据库n \u003e文件名.sql\r","```\r","\r","恢复数据库(注意:进入Mysql命令行再执行)\r","\r","```sql\r","Source 文件名.sql\r","```\r","\r","```sql\r","#练习 : database03.sql 备份db02 和 db03 库中的数据，并恢复\r","\r","#备份, 要在Dos下执行mysqldump指令其实在mysql安装目录\\bin\r","#这个备份的文件，就是对应的sql语句\r","mysqldump -u root -p -B db02 db03 \u003e d:\\\\bak.sql\r","\r","DROP DATABASE ecshop;\r","\r","#恢复数据库(注意：进入Mysql命令行再执行)\r","source d:\\\\bak.sql\r","#第二个恢复方法， 直接将bak.sql的内容放到查询编辑器中，执行，相当于重新执行了一遍\r","```\r","\r","## 备份恢复数据库的表\r","\r","备份库的表\r","\r","```sql\r","mysqldump -u 用户名 -p密码 数据库 表1 表2 表n \u003e d:\\\\文件名.sql\r","```\r","\r","## 创建表\r","\r","```sql\r","CREATE TABLE table_name\r","(\r","\tfield1 datatype,\r","    field2 datatype,\r","    field3 datatype\r",")character set 字符集 collate 校对规则 engine 存储引擎\r","```\r","\r","+ field:指定列名 datatype:指定列类型(字段类型)\r","+ character set:如不指定则为所在数据库字符集\r","+ collate:如不指定则为所在数据库校对规则\r","+ engine:引擎(这个涉及内容较多)\r","\r","```sql\r","#指令创建表\r","#注意：db02创建表时，要根据需保存的数据创建相应的列，并根据数据的类型定义相应的列类型。例：user表 (快速入门案例 create_tab01.sql)\r","#id        \t整形               [图形化，指令]                \r","#name \t\t字符串\r","#password \t字符串\r","#birthday \t日期\r","CREATE TABLE `user` (\r","\tid INT, \r","\t`name` VARCHAR(255),\r","\t`password` VARCHAR(255), \r","\t`birthday` DATE)\r","\tCHARACTER SET utf8 COLLATE utf8_bin ENGINE INNODB;\r","```\r","\r","## Mysql 常用数据类型(列类型)\r","\r","![](https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/image-20230510161256415.png)\r","\r","![](https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/image-20230510161237452.png)\r","\r","![](https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/image-20230510160526290.png)\r","\r","### 数值型(整数)的基本使用\r","\r","```sql\r","#演示整型的是一个\r","#使用tinyint 来演示范围 有符号 -128 ~ 127  如果没有符号 0-255\r","#说明： 表的字符集，校验规则, 存储引擎，老师使用默认\r","#1. 如果没有指定 unsinged , 则TINYINT就是有符号\r","#2. 如果指定 unsinged , 则TINYINT就是无符号 0-255\r","CREATE TABLE t3 (\r","\tid TINYINT);\r","CREATE TABLE t4 (\r","\tid TINYINT UNSIGNED);\r","\t\r","INSERT INTO t3 VALUES(127); #这是非常简单的添加语句\r","SELECT * FROM t3\r","\r","INSERT INTO t4 VALUES(255);\r","SELECT * FROM t4;\r","```\r","\r","### 定义一个无符号的整数\r","\r","```sql\r","create table t10 (id tinyint );//默认是有符号的\r","create table t11 (id tinyint unsigned);//无符号的 （后加unsigned就行）\r","```\r","\r","### 数值型(bit)的使用\r","\r","1.基本使用\r","\r","```sql\r","mysql \u003e create table t05 (num bit(8));\r","mysql \u003e insert into t05 (1, 3);\r","mysql \u003e insert into t05 values(2, 65);\r","```\r","\r","2.细节说明bit.sql\r","\r","+ bit字段显示时，按照位的方式显示.\r","+ 查询的时候仍然可以用使用添加的数值\r","+ 如果一个值只有0，1可以考虑使用bit(1), 可以节约空间\r","+ 位类型。M指定位数，默认值1，范围1-64\r","\r","```sql\r","#演示bit类型使用\r","#说明\r","#1. bit(m) m 在 1-64\r","#2. 添加数据 范围 按照你给的位数来确定，比如 m = 8 表示一个字节 0~255\r","#3. 显示按照bit \r","#4. 查询时，仍然可以按照数来查询\r","CREATE TABLE t05 (num BIT(8));\r","INSERT INTO t05 VALUES(255); # 按位显示 255 就是全1 （b'11111111'）\r","SELECT * FROM t05;\r","SELECT * FROM t05 WHERE num = 1;\r","```\r","\r","### 数值型(小数)的基本使用\r","\r","1. FLOAT/**DOUBLE** [UNSIGNED]\r","\r","   Float单精度精度，Double双精度.\r","\r","2. **DECIMAL**[M,D] [UNSIGNED]\r","\r","+ 可以支持更加精确的小数位。M是小数位数(精度)的总数，D是小数点(标度)后面的位数。\r","+ 如果D是0，则值没有小数点或分数部分。M最大65。D最大是30。如果D被省略,默认是0。如果M被省略,默认是10。\r","+ 建议:如果希望小数的精度高，推荐使用decimal\r","\r","```sql\r","#演示decimal类型、float、double使用\r","\r","#创建表\r","CREATE TABLE t06 (\r","\tnum1 FLOAT,\r","\tnum2 DOUBLE,\r","\tnum3 DECIMAL(30,20));\r","#添加数据\r","INSERT INTO t06 VALUES(88.12345678912345, 88.12345678912345,88.12345678912345);\r","SELECT * FROM t06;\r","\r","#decimal可以存放很大的数\r","CREATE TABLE t07 (\r","\tnum DECIMAL(65));\r","INSERT INTO t07 VALUES(8999999933338388388383838838383009338388383838383838383);\r","\r","SELECT * FROM t07;\r","CREATE TABLE t08(\r","\tnum BIGINT UNSIGNED)\r","INSERT INTO t08 VALUES(8999999933338388388383838838383009338388383838383838383);\r","SELECT * FROM t08;\r","```\r","\r","### 字符串的基本使用\r","\r","CHAR(size)\r","\r","固定长度字符串最大255**字符**\r","\r","VARCHAR(size)0~65535\r","\r","可变长度字符串最大65532**字节**【utf8编码最大21844字符（（65535-3） / 3）其中1-3个字节用于记录大小】\r","\r","```sql\r","#演示字符串类型使用char varchar\r","#注释的快捷键 shift+ctrl+c , 注销注释 shift+ctrl+r\r","-- CHAR(size)\r","-- 固定长度字符串 最大255 字符 \r","-- VARCHAR(size)    0~65535字节\r","-- 可变长度字符串 最大65532字节  【utf8编码最大21844字符 1-3个字节用于记录大小】\r","-- 如果表的编码是 utf8 varchar(size) size = (65535-3) / 3 = 21844\r","-- 如果表的编码是 gbk varchar(size) size = (65535-3) / 2 = 32766\r","CREATE TABLE t09 (\r","\t`name` CHAR(255));\r","\r","CREATE TABLE t10 (\r","\t`name` VARCHAR(32766)) CHARSET gbk;\r","\r","DROP TABLE t10;\r","```\r","\r","### 字符串使用细节\r","\r","1.细节1\r","\r","+ char(4) //这个4表示字符数(最大255)，不是字节数,不管是中文还是字母都是放四个,按字符计算.\r","+ varchar(4) //这个4表示字符数，不管是字母还是中文都以定义好的表的编码来存放数据\r","+ 不管是中文还是英文字母，都是最多存放4个，是按照字符来存放的.\r","\r","2.细节2\r","\r","+ char(4)是定长(固定的大小)，就是说，即使你插入'aa'，也会占用分配的4个字符的空间.\r","+ varchar(4)是变长(变化的大小)，就是说，如果你插入了'aa',实际占用空间大小并不是4个字符，而是按照实际占用空间来分配(说明:varchar本身还需要占用1-3个字节来记录存放内容长度)    `L(实际数据大小)+(1-3)字节`\r","\r","3.细节3\r","\r","什么时候使用char，什么时候使用varchar\r","\r","1. 如果数据是定长,推荐使用char,比如md5的密码,邮编,手机号,身份证号码等. char(32)\r","2. 如果一个字段的长度是不确定,我们使用varchar ,比如留言,文章\r","   查询速度: char \u003e varchar\r","\r","4.细节4\r","\r","在存放文本时，也可以使用Text数据类型。可以将TEXT列视为VARCHAR列，注意Text 不能有默认值。大小0-2^16字节。如果希望存放更多字符，可以选择\r","MEDIUMTEXT 0O-2^24 或者LONGTEXT 0~2^32\r","\r","```sql\r","#演示字符串类型的使用细节\r","#char(4) 和 varchar(4) 这个4表示的是字符，而不是字节, 不区分字符是汉字还是字母\r","CREATE TABLE t11(\r","\t`name` CHAR(4));\r","INSERT INTO t11 VALUES('你好你好');\r","\r","SELECT * FROM t11;\r","\r","CREATE TABLE t12(\r","\t`name` VARCHAR(4));\r","INSERT INTO t12 VALUES('你好你好');\r","INSERT INTO t12 VALUES('ab北京');\r","SELECT * FROM t12;\r","\r","#如果varchar 不够用，可以考试使用mediumtext 或者longtext, \r","#如果想简单点，可以使用直接使用text\r","CREATE TABLE t13( content TEXT, content2 MEDIUMTEXT , content3 LONGTEXT);\r","INSERT INTO t13 VALUES('你好你教育', '你好你教育100', '你好你教育1000~~');\r","SELECT * FROM t13;\r","```\r","\r","### 日期类型的基本使用\r","\r","```sql\r","CREATE TABLE birthday6( t1 DATE, t2 DATETIME,\r","t3 TIMESTAMP NOT NULL DEFAULTCURRENT TIMESTAMP ON UPDATE\r","CURRENT TIMESTAMP ); timestamp时间戳\r","# NOT NULL DEFAULTCURRENT TIMESTAMP ON UPDATE CURRENT TIMESTAMP 意思是没有默认值的话会根据当前时间自动更新\r","```\r","\r","```sql\r","mysql\u003e INSERT INTO birthday (t1,t2)\r","VALUES('2022-11-11',2022-11-11 10:10:10');\r","```\r","\r","日期类型的细节说明\r","\r","TimeStamp在Insert和update时，自动更新。\r","\r","```sql\r","#演示时间相关的类型\r","#创建一张表, date , datetime , timestamp\r","CREATE TABLE t14 (\r","\tbirthday DATE , -- 生日\r","\tjob_time DATETIME, -- 记录年月日 时分秒\r","\tlogin_time TIMESTAMP \r","\t\tNOT NULL DEFAULT CURRENT_TIMESTAMP \r","\t\tON UPDATE CURRENT_TIMESTAMP); -- 登录时间, 如果希望login_time列自动更新, 需要配置\r","\t\t\r","SELECT * FROM t14;\r","INSERT INTO t14(birthday, job_time) \r","\tVALUES('2022-11-11','2022-11-11 10:10:10');\r","-- 如果我们更新 t14 表的某条记录，login_time列会自动的以当前时间进行更新\r","```\r","\r","## 创建表练习\r","\r","```sql\r","#创建表的课堂练习\r","-- 字段\t属性\r","-- Id\t整形\r","-- name\t字符型\r","-- sex\t字符型\r","-- brithday\t日期型（date）\r","-- entry_date\t日期型   (date)\r","-- job\t字符型\r","-- Salary\t小数型\r","-- resume\t文本型\r","-- 自己一定要练习一把\r","CREATE TABLE `emp` (\r","\tid INT,\r","\t`name` VARCHAR(32),\r","\tsex CHAR(1), \r","\tbrithday DATE,\r","\tentry_date DATETIME,\r","\tjob VARCHAR(32),\r","\tsalary DOUBLE,\r","\t`resume` TEXT) CHARSET utf8 COLLATE utf8_bin ENGINE INNODB;\r","-- 添加一条\r","INSERT INTO `emp`\r","\tVALUES(100, '小妖怪', '男', '2000-11-11', \r","\t\t'2010-11-10 11:11:11', '巡山的', 3000, '大王叫我来巡山');\r","\t\t\r","SELECT * FROM `emp`;\r","```\r","\r","## 修改表-基本介绍\r","\r","![](https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/image-20230510181117973.png)\r","\r","## 修改表-课堂练习\r","\r","`NOT NULL DEFAULT ''` 不允许为空NULL，默认是一个空的' '字符。\r","\r","```sql\r","#修改表的操作练习\r","--  员工表emp的上增加一个image列，varchar类型(要求在resume后面)。\r","ALTER TABLE emp \r","\tADD image VARCHAR(32) NOT NULL DEFAULT '' \r","\tAFTER RESUME\r","DESC employee -- 显示表结构，可以查看表的所有列\r","--  修改job列，使其长度为60。\r","ALTER TABLE emp\r","\tMODIFY job VARCHAR(60) NOT NULL DEFAULT ''\r","--  删除sex列。\r","ALTER TABLE emp\r","\tDROP sex\r","--  表名改为employee。\r","RENAME TABLE emp TO employee\r","--  修改表的字符集为utf8 \r","ALTER TABLE employee CHARACTER SET utf8\r","--  列名name修改为us\ter_name\r","ALTER TABLE employee \r","\tCHANGE `name` `user_name` VARCHAR(64) NOT NULL DEFAULT ''\r","DESC employee\r","```\r","\r","## 数据库C[create]R[read]U[update]D[delete]语句\r","\r","1. Insert语句 (添加数据)\r","2. Update语句 (更新数据）\r","3. Delete语句 (删除数据)\r","4. Select语句 (查找数据)\r","\r","## Insert 语句\r","\r","### 使用INSERT 语句向表中插入数据。\r","\r","![](https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/image-20230510182710186.png)\r","\r","```sql\r","#练习insert 语句\r","-- 创建一张商品表goods (id  int , goods_name varchar(10), price double );\r","-- 添加2条记录\r","CREATE TABLE `goods` (\r","\tid INT ,\r","\tgoods_name VARCHAR(10), -- 长度10\r","\tprice DOUBLE NOT NULL DEFAULT 100 );\r","-- 添加数据\r","INSERT INTO `goods` (id, goods_name, price) \r","\tVALUES(10, '华为手机', 2000);\r","INSERT INTO `goods` (id, goods_name, price) \r","\tVALUES(20, '苹果手机', 3000);\r","SELECT * FROM goods;\r","\r","CREATE TABLE `goods2` (\r","\tid INT ,\r","\tgoods_name VARCHAR(10), -- 长度10\r","\tprice DOUBLE NOT NULL DEFAULT 100 );\r","```\r","\r","### 细节说明\r","\r","```sql\r","#说明insert 语句的细节\r","-- 1.插入的数据应与字段的数据类型相同。\r","--       比如 把 'abc' 添加到 int 类型会错误\r","INSERT INTO `goods` (id, goods_name, price) \r","\tVALUES('abc', '小米手机', 2000);\r","-- 2. 数据的长度应在列的规定范围内，例如：不能将一个长度为80的字符串加入到长度为40的列中。\r","INSERT INTO `goods` (id, goods_name, price) \r","\tVALUES(40, 'vovo手机vovo手机vovo手机vovo手机vovo手机', 3000);\r","-- 3. 在values中列出的数据位置必须与被加入的列的排列位置相对应。\r","INSERT INTO `goods` (id, goods_name, price)  -- 不对\r","\tVALUES('vovo手机',40, 2000);\r","-- 4. 字符和日期型数据应包含在单引号中。\r","INSERT INTO `goods` (id, goods_name, price) \r","\tVALUES(40, vovo手机, 3000); -- 错误的 vovo手机 应该 'vovo手机'\r","-- 5. 列可以插入空值[前提是该字段允许为空（如果指定 not null 则不可以）]，insert into table value(null)\r","INSERT INTO `goods` (id, goods_name, price) \r","\tVALUES(40, 'vovo手机', NULL);\r","-- 6. insert into tab_name (列名..)  values (),(),()  形式添加多条记录\r","INSERT INTO `goods` (id, goods_name, price) \r","\tVALUES(50, '三星手机', 2300),(60, '海尔手机', 1800);\r","-- 7. 如果是给表中的所有字段添加数据，可以不写前面的字段名称\r","INSERT INTO `goods`   \r","\tVALUES(70, 'IBM手机', 5000);\r","-- 8. 默认值的使用，当不给某个字段值时，如果有默认值就会添加默认值，否则报错\r","      -- 如果某个列 没有指定 not null ,那么当添加数据时，没有给定值，则会默认给null\r","      -- 如果我们希望指定某个列的默认值，可以在创建表时指定\r","INSERT INTO `goods` (id, goods_name)   \r","\tVALUES(80, '格力手机');\r","\r","SELECT * FROM goods;\r","\r","INSERT INTO `goods2` (id, goods_name)   \r","\tVALUES(10, '顺平手机');\r","SELECT * FROM goods2;\r","```\r","\r","## update 语句\r","\r","### 使用 update 语句修改表中数据\r","\r","![](https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/image-20230510183440814.png)\r","\r","### 基本使用\r","\r","```sql\r","-- 演示update语句\r","-- 要求: 在上面创建的employee表中修改表中的纪录\r","-- 1. 将所有员工薪水修改为5000元。[如果没有带where 条件，会修改所有的记录，因此要小心]\r","UPDATE employee SET salary = 5000 \r","-- 2. 将姓名为 小妖怪 的员工薪水修改为3000元。\r","UPDATE employee \r","\tSET salary = 3000 \r","\tWHERE user_name = '小妖怪' \r","-- 3. 将 老妖怪 的薪水在原有基础上增加1000元\r","INSERT INTO employee \r","\tVALUES(200, '老妖怪', '1990-11-11', '2000-11-11 10:10:10', '捶背的', 5000, '给大王捶背', 'd:\\\\a.jpg');\r","\r","UPDATE employee \r","\tSET salary = salary + 1000 \r","\tWHERE user_name = '老妖怪' \r","\r","-- 可以修改多个列的值\r","UPDATE employee \r","\tSET salary = salary + 1000 , job = '出主意的'\r","\tWHERE user_name = '老妖怪' \r","SELECT * FROM employee;\r","```\r","\r","### 使用细节\r","\r","1. WHERE子句指定应更新哪些行。如没有WHERE子句，则更新所有的行(记录)。\r","2. 如果需要修改多个字段，可以通过 `set 字段1=值1,字段2=值2...`\r","\r","## delete 语句\r","\r","### 使用delete 语句删除表中数据\r","\r","删除只能按照行删除，不能按照列删除。\r","\r","![](https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/image-20230510183939705.png)\r","\r","```sql\r","-- delete 语句演示\r","\r","--  删除表中名称为’老妖怪’的记录。\r","DELETE FROM employee \r","\tWHERE user_name = '老妖怪';\r","--  删除表中所有记录, 老师提醒，一定要小心\r","DELETE FROM employee;\r","\r","-- Delete语句不能删除某一列的值（可使用update 设为 null 或者 ''）\r","UPDATE employee SET job = '' WHERE user_name = '老妖怪';\r","\r","SELECT * FROM employee\r","\r","-- 要删除这个表\r","DROP TABLE employee;\r","```\r","\r","### 使用细节\r","\r","+ 如果不使用where子句，将删除表中所有数据。\r","+ Delete语句不能删除某一列的值(可使用update设为null 或者\"\")\r","+ 使用delete语句删除记录,不删除表本身。如要删除表，使用droptable语句。`drop table 表名`;\r","\r","## select 语句\r","\r","### 基本语法\r","\r","![](https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/image-20230510184317107.png)\r","\r","### 注意事项(创建测试表学生表)\r","\r","1. Select 指定查询哪些列的数据。\r","2. column指定列名。\r","3. *号代表查询所有列。\r","4. From指定查询哪张表。\r","5. DISTINCT可选, 指显示结果时，是否去掉重复数据。\r","\r","### 练习\r","\r","```sql\r","-- select 语句【重点 难点】\r","CREATE TABLE student(\r","\tid INT NOT NULL DEFAULT 1,\r","\tNAME VARCHAR(20) NOT NULL DEFAULT '',\r","\tchinese FLOAT NOT NULL DEFAULT 0.0,\r","\tenglish FLOAT NOT NULL DEFAULT 0.0,\r","\tmath FLOAT NOT NULL DEFAULT 0.0\r",");\r","\r","INSERT INTO student(id,NAME,chinese,english,math) VALUES(1,'韩顺平',89,78,90);\r","INSERT INTO student(id,NAME,chinese,english,math) VALUES(2,'张飞',67,98,56);\r","INSERT INTO student(id,NAME,chinese,english,math) VALUES(3,'宋江',87,78,77);\r","INSERT INTO student(id,NAME,chinese,english,math) VALUES(4,'关羽',88,98,90);\r","INSERT INTO student(id,NAME,chinese,english,math) VALUES(5,'赵云',82,84,67);\r","INSERT INTO student(id,NAME,chinese,english,math) VALUES(6,'欧阳锋',55,85,45);\r","INSERT INTO student(id,NAME,chinese,english,math) VALUES(7,'黄蓉',75,65,30);\r","INSERT INTO student(id,NAME,chinese,english,math) VALUES(8,'韩信',45,65,99);\r","\r","SELECT * FROM student;\r","\r","-- 查询表中所有学生的信息。\r","SELECT * FROM student;\r","-- 查询表中所有学生的姓名和对应的英语成绩。\r","SELECT `name`,english FROM student;\r","-- 过滤表中重复数据 distinct 。\r","SELECT DISTINCT english FROM student;\r","-- 要查询的记录，每个字段都相同，才会去重\r","SELECT DISTINCT `name`, english FROM student;\r","```\r","\r","### 使用表达式对查询的列进行运算\r","\r","![](https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/image-20230510184735007.png)\r","\r","### 在select 语句中可使用as 语句\r","\r","![](https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/image-20230510184752011.png)\r","\r","### 练习\r","\r","```sql\r","-- select 语句的使用\r","\r","-- 统计每个学生的总分\r","SELECT `name`, (chinese+english+math) FROM student;\r","-- 在所有学生总分加10分的情况\r","SELECT `name`, (chinese + english + math + 10) FROM student;\r","-- 使用别名表示学生分数。\r","SELECT `name` AS '名字', (chinese + english + math + 10) AS total_score \r","\tFROM student;\r","```\r","\r","![](https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/image-20230510184934313.png)\r","\r","### 在where 子句中经常使用的运算符\r","\r","![](https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/image-20230511095419843.png)\r","\r","其中的BETWEEN ... AND 是闭区间。\r","\r","### 使用where 子句，进行过滤查询\r","\r","+ `_`：匹配任意一个字符；\r","+ `%`：匹配0个或多个字符；\r","+ `[ ]`：匹配[ ]中的任意一个字符(若要比较的字符是连续的，则可以用连字符“-”表 达 )；\r","+ `[^ ]`：不匹配[ ]中的任意一个字符。\r","\r","```sql\r","-- select 语句\r","-- 查询姓名为赵云的学生成绩\r","SELECT * FROM student \r","\tWHERE `name` = '赵云'\r","-- 查询英语成绩大于90分的同学\r","SELECT * FROM student \r","\tWHERE english \u003e 90\r","-- 查询总分大于200分的所有同学\r","\r","SELECT * FROM student \r","\tWHERE (chinese + english + math) \u003e 200\r","\t\r","-- 查询math大于60 并且(and) id大于4的学生成绩\r","SELECT * FROM student\r","\tWHERE math \u003e60 AND id \u003e 4\r","-- 查询英语成绩大于语文成绩的同学\r","SELECT * FROM student\r","\tWHERE english \u003e chinese\r","-- 查询总分大于200分 并且 数学成绩小于语文成绩,的姓赵的学生.\r","-- 赵% 表示 名字以赵开头的就可以\r","SELECT * FROM student\r","\tWHERE (chinese + english + math) \u003e 200 AND \r","\t\tmath \u003c chinese AND `name` LIKE '赵%'\r","-- 查询英语分数在 80－90之间的同学。\r","SELECT * FROM student\r","\tWHERE english \u003e= 80 AND english \u003c= 90;\r","SELECT * FROM student\r","\tWHERE english BETWEEN 80 AND 90; -- between .. and .. 是 闭区间\r","-- 查询数学分数为89,90,91的同学。\r","SELECT * FROM student \r","\tWHERE math = 89 OR math = 90 OR math = 91;\r","SELECT * FROM student \r","\tWHERE math IN (89, 90, 91);\r","-- 查询所有姓李的学生成绩。\r","SELECT * FROM student \r","\tWHERE `name` LIKE '韩%'\r","-- 查询数学分\u003e80，语文分\u003e80的同学\r","```\r","\r","### 使用order by 子句排序查询结果\r","\r","![](https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/image-20230511100957298.png)\r","\r","1. Order by 指定排序的列，排序的列既可以是表中的列名，也可以是select\r","语句后指定的列名。\r","2. Asc升序[默认]、Desc降序\r","3. ORDER BY子句应位于SELECT语句的结尾。\r","\r","```sql\r","-- 演示order by使用\r","-- 对数学成绩排序后输出【升序】。\r","SELECT * FROM student \r","\tORDER BY math;\r","-- 对总分按从高到低的顺序输出 [降序] -- 使用别名排序\r","SELECT `name` , (chinese + english + math) AS total_score FROM student \r","\tORDER BY total_score DESC;\r","-- 对姓韩的学生成绩[总分]排序输出(升序) where + order by\r","SELECT `name`, (chinese + english + math) AS total_score FROM student\r","\tWHERE `name` LIKE '韩%'\r","\tORDER BY total_score;\r","```\r","\r","## 合计/统计函数\r","\r","### count\r","\r","![](https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/image-20230511112333116.png)\r","\r","```sql\r","-- 演示mysql的统计函数的使用\r","-- 统计一个班级共有多少学生？\r","SELECT COUNT(*) FROM student;\r","-- 统计数学成绩大于90的学生有多少个？\r","SELECT COUNT(*) FROM student\r","\tWHERE math \u003e 90\r","-- 统计总分大于250的人数有多少？\r","SELECT COUNT(*) FROM student\r","\tWHERE (math + english + chinese) \u003e 250\r","-- count(*) 和 count(列) 的区别 \r","-- 解释 :count(*) 返回满足条件的记录的行数\r","-- count(列): 统计满足条件的某列有多少个，但是会排除 为null的情况\r","CREATE TABLE t15 (\r","\t`name` VARCHAR(20));\r","INSERT INTO t15 VALUES('tom');\r","INSERT INTO t15 VALUES('jack');\r","INSERT INTO t15 VALUES('mary');\r","INSERT INTO t15 VALUES(NULL);\r","SELECT * FROM t15;\r","\r","SELECT COUNT(*) FROM t15; -- 4\r","SELECT COUNT(`name`) FROM t15;-- 3\r","\r","\r","-- 演示sum函数的使用\r","-- 统计一个班级数学总成绩？\r","SELECT SUM(math) FROM student;\r","-- 统计一个班级语文、英语、数学各科的总成绩\r","SELECT SUM(math) AS math_total_score,SUM(english),SUM(chinese) FROM student;\r","-- 统计一个班级语文、英语、数学的成绩总和\r","SELECT SUM(math + english + chinese) FROM student;\r","-- 统计一个班级语文成绩平均分\r","SELECT SUM(chinese)/ COUNT(*)  FROM student;\r","SELECT SUM(`name`) FROM student;\r","\r","-- 演示avg的使用\r","-- 练习：\r","-- 求一个班级数学平均分？\r","SELECT AVG(math) FROM student;\r","-- 求一个班级总分平均分\r","SELECT AVG(math + english + chinese) FROM student;\r","\r","-- 演示max 和 min的使用\r","-- 求班级最高分和最低分（数值范围在统计中特别有用）\r","SELECT MAX(math + english + chinese), MIN(math + english + chinese) \r","\tFROM student;\r","\r","-- 求出班级数学最高分和最低分\r","SELECT MAX(math) AS math_high_socre, MIN(math)  AS math_low_socre\r","\tFROM student;\r","```\r","\r","### sum\r","\r","Sum函数返回满足where条件的行的和 一般使用在数值列。\r","\r","![](https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/image-20230511113225150.png)\r","\r","### avg\r","\r","AVG函数返回满足where条件的一列的平均值\r","\r","![](https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/image-20230511113429717.png)\r","\r","### max/min\r","\r","Max/min函数返回满足where条件的一列的最大/最小值\r","\r","![](https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/image-20230511113454286.png)\r","\r","### 使用group by 子句对列进行分组\r","\r","![](https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/image-20230511113541638.png)\r","\r","### 使用having 子句对分组后的结果进行过滤\r","\r","![](https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/image-20230511113602047.png)\r","\r","group by 用于对查询的结果分组统计,(示意图)\r","\r","having 子句用于限制分组显示结果\r","\r","```sql\r","CREATE TABLE dept( /*部门表*/\r","deptno MEDIUMINT   UNSIGNED  NOT NULL  DEFAULT 0, \r","dname VARCHAR(20)  NOT NULL  DEFAULT \"\",\r","loc VARCHAR(13) NOT NULL DEFAULT \"\"\r",");\r","\r","INSERT INTO dept VALUES(10, 'ACCOUNTING', 'NEW YORK'), \r","(20, 'RESEARCH', 'DALLAS'), \r","(30, 'SALES', 'CHICAGO'), \r","(40, 'OPERATIONS', 'BOSTON');\r","\r","SELECT * FROM dept;\r","\r","-- 员工表\r","\r","CREATE TABLE emp\r","(empno  MEDIUMINT UNSIGNED  NOT NULL  DEFAULT 0, /*编号*/\r","ename VARCHAR(20) NOT NULL DEFAULT \"\", /*名字*/\r","job VARCHAR(9) NOT NULL DEFAULT \"\",/*工作*/\r","mgr MEDIUMINT UNSIGNED ,/*上级编号*/\r","hiredate DATE NOT NULL,/*入职时间*/\r","sal DECIMAL(7,2)  NOT NULL,/*薪水*/\r","comm DECIMAL(7,2) ,/*红利 奖金*/\r","deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0 /*部门编号*/\r",");\r","\r","-- 添加测试数据\r"," INSERT INTO emp VALUES(7369, 'SMITH', 'CLERK', 7902, '1990-12-17', 800.00,NULL , 20), \r","(7499, 'ALLEN', 'SALESMAN', 7698, '1991-2-20', 1600.00, 300.00, 30),  \r","(7521, 'WARD', 'SALESMAN', 7698, '1991-2-22', 1250.00, 500.00, 30),  \r","(7566, 'JONES', 'MANAGER', 7839, '1991-4-2', 2975.00,NULL,20),  \r","(7654, 'MARTIN', 'SALESMAN', 7698, '1991-9-28',1250.00,1400.00,30),  \r","(7698, 'BLAKE','MANAGER', 7839,'1991-5-1', 2850.00,NULL,30),  \r","(7782, 'CLARK','MANAGER', 7839, '1991-6-9',2450.00,NULL,10),  \r","(7788, 'SCOTT','ANALYST',7566, '1997-4-19',3000.00,NULL,20),  \r","(7839, 'KING','PRESIDENT',NULL,'1991-11-17',5000.00,NULL,10),  \r","(7844, 'TURNER', 'SALESMAN',7698, '1991-9-8', 1500.00, NULL,30),  \r","(7900, 'JAMES','CLERK',7698, '1991-12-3',950.00,NULL,30),  \r","(7902, 'FORD', 'ANALYST',7566,'1991-12-3',3000.00, NULL,20),  \r","(7934,'MILLER','CLERK',7782,'1992-1-23', 1300.00, NULL,10);\r","\r","SELECT * FROM emp;\r","\r","-- 工资级别\r","#工资级别表\r","CREATE TABLE salgrade\r","(\r","grade MEDIUMINT UNSIGNED NOT NULL DEFAULT 0, /*工资级别*/ \r","losal DECIMAL(17,2)  NOT NULL, /* 该级别的最低工资 */\r","hisal DECIMAL(17,2)  NOT NULL /* 该级别的最高工资*/\r",");\r","\r","INSERT INTO salgrade VALUES (1,700,1200);\r","INSERT INTO salgrade VALUES (2,1201,1400);\r","INSERT INTO salgrade VALUES (3,1401,2000);\r","INSERT INTO salgrade VALUES (4,2001,3000);\r","INSERT INTO salgrade VALUES (5,3001,9999);\r","\r","SELECT * FROM salgrade;\r","SELECT * FROM dept;\r","SELECT * FROM emp;\r","\r","# 演示group by + having\r","GROUP by用于对查询的结果分组统计, (示意图)\r","-- having子句用于限制分组显示结果.\r","-- ?如何显示每个部门的平均工资和最高工资\r","-- 老韩分析: avg(sal) max(sal)\r","-- 按照部分来分组查询\r","SELECT AVG(sal), MAX(sal) , deptno \r","\tFROM  emp GROUP BY deptno; \r","-- 使用数学方法，对小数点进行处理\r","SELECT FORMAT(AVG(sal),2), MAX(sal) , deptno \r","\tFROM  emp GROUP BY deptno; \r","\r","-- ?显示每个部门的每种岗位的平均工资和最低工资\r","-- 老师分析 1. 显示每个部门的平均工资和最低工资\r","--          2. 显示每个部门的每种岗位的平均工资和最低工资\r","SELECT AVG(sal), MIN(sal) , deptno, job \r","\tFROM  emp GROUP BY deptno, job; \r","\r","-- ?显示平均工资低于2000的部门号和它的平均工资 // 别名\r","\r","-- 老师分析 [写sql语句的思路是化繁为简,各个击破]\r","-- 1. 显示各个部门的平均工资和部门号\r","-- 2. 在1的结果基础上，进行过滤，保留 AVG(sal) \u003c 2000\r","-- 3. 使用别名进行过滤 \r","\r","SELECT AVG(sal), deptno \r","\tFROM emp GROUP BY deptno\r","\t\tHAVING AVG(sal) \u003c 2000;\r","-- 使用别名\t\t\r","SELECT AVG(sal) AS avg_sal, deptno \r","\tFROM emp GROUP BY deptno\r","\t\tHAVING avg_sal \u003c 2000;\t\r","```\r","\r","## 字符串相关函数\r","\r","![](https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/image-20230511115506366.png)\r","\r","```sql\r","-- 演示字符串相关函数的使用  ， 使用emp表来演示\r","-- CHARSET(str)\t返回字串字符集\r","SELECT CHARSET(ename) FROM emp;\r","-- CONCAT (string2  [,... ])\t连接字串, 将多个列拼接成一列\r","SELECT CONCAT(ename, ' 工作是 ', job) FROM emp;\r","\r","-- INSTR (string ,substring )\t返回substring在string中出现的位置,没有返回0\r","-- dual 亚元表, 系统表 可以作为测试表使用\r","SELECT INSTR('hanshunping', 'ping') FROM DUAL; \r","\r","-- UCASE (string2 )\t转换成大写\r","SELECT UCASE(ename) FROM emp;\r","\r","-- LCASE (string2 )\t转换成小写\r","\r","SELECT LCASE(ename) FROM emp;\r","-- LEFT (string2 ,length )\t从string2中的左边起取length个字符\r","-- RIGHT (string2 ,length )\t从string2中的右边起取length个字符\r","SELECT LEFT(ename, 2) FROM emp;\r","\r","-- LENGTH (string )\tstring长度[按照字节]\r","SELECT LENGTH(ename) FROM emp;\r","-- REPLACE (str ,search_str ,replace_str ) \t\r","-- 在str中用 replace_str 替换 search_str\r","-- 如果是 manager 就替换成 经理\r","SELECT ename, REPLACE(job,'MANAGER', '经理')  FROM emp;\r","\r","-- STRCMP (string1 ,string2 )\t逐字符比较两字串大小\r","SELECT STRCMP('hsp', 'hsp') FROM DUAL;\r","-- SUBSTRING (str , position  [,length ])\t\r","-- 从str的position开始【从1开始计算】,取length个字符\r","-- 从ename 列的第一个位置开始取出2个字符\r","SELECT SUBSTRING(ename, 1, 2) FROM emp;\r","\r","-- LTRIM (string2 ) RTRIM (string2 )  TRIM(string)\r","-- 去除前端空格或后端空格\r","SELECT LTRIM('  韩顺平教育') FROM DUAL;\r","SELECT RTRIM('韩顺平教育   ') FROM DUAL;\r","SELECT TRIM('    韩顺平教育   ') FROM DUAL;\r","\r","-- 练习: 以首字母小写的方式显示所有员工emp表的姓名\r","-- 方法1 \r","-- 思路先取出ename 的第一个字符，转成小写的\r","-- 把他和后面的字符串进行拼接输出即可\r","\r","SELECT CONCAT(LCASE(SUBSTRING(ename,1,1)),  SUBSTRING(ename,2)) AS new_name\r","\tFROM emp;  \r","\r","SELECT CONCAT(LCASE(LEFT(ename,1)),  SUBSTRING(ename,2)) AS new_name\r","\tFROM emp; \r","```\r","\r","## 数学相关函数\r","\r","![](https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/image-20230511165033825.png)\r","\r","`rand()` 返回一个随机浮点值v,范围在0到1之间(即,其范围为0\u003c=v\u003c=1.0)。若已指定一个整数参数N, 则它被用作种子值,用来产生重复序列。\r","\r","```sql\r","-- 演示数学相关函数\r","\r","-- ABS(num)\t绝对值\r","SELECT ABS(-10) FROM DUAL;\r","-- BIN (decimal_number )十进制转二进制\r","SELECT BIN(10) FROM DUAL;\r","-- CEILING (number2 )\t向上取整, 得到比num2 大的最小整数\r","SELECT CEILING(-1.1) FROM DUAL;\r","\r","-- CONV(number2,from_base,to_base)\t进制转换\r","-- 下面的含义是 8 是十进制的8, 转成 2进制输出\r","SELECT CONV(8, 10, 2) FROM DUAL;\r","-- 下面的含义是 8 是16进制的8, 转成 2进制输出\r","SELECT CONV(16, 16, 10) FROM DUAL;\r","\r","-- FLOOR (number2)\t向下取整,得到比 num2 小的最大整数\r","SELECT FLOOR(-1.1) FROM DUAL;\r","\r","-- FORMAT (number,decimal_places )\t保留小数位数(四舍五入)\r","SELECT FORMAT(78.125458,2) FROM DUAL;\r","\r","-- HEX (DecimalNumber )\t转十六进制\r","\r","-- LEAST (number , number2  [,..])\t求最小值\r","SELECT LEAST(0,1, -10, 4) FROM DUAL;\r","-- MOD (numerator ,denominator )\t求余\r","SELECT MOD(10, 3) FROM DUAL;\r","\r","-- RAND([seed])\tRAND([seed]) 返回随机数 其范围为 0 ≤ v ≤ 1.0\r","-- 1. 如果使用 rand() 每次返回不同的随机数 ，在 0 ≤ v ≤ 1.0\r","-- 2. 如果使用 rand(seed) 返回随机数, 范围 0 ≤ v ≤ 1.0, 如果seed不变，该随机数也不变了\r","SELECT RAND() FROM DUAL;\r","\r","SELECT CURRENT_TIMESTAMP() FROM DUAL;\r","```\r","\r","## 时间日期相关函数\r","\r","![](https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/image-20230511205337746.png)\r","\r","```sql\r","-- 日期时间相关函数\r","\r","-- CURRENT_DATE (  )\t当前日期\r","SELECT CURRENT_DATE() FROM DUAL;\r","-- CURRENT_TIME (  )\t当前时间\r","SELECT CURRENT_TIME()  FROM DUAL;\r","-- CURRENT_TIMESTAMP (  ) 当前时间戳\r","SELECT CURRENT_TIMESTAMP()  FROM DUAL;\r","\r","-- 创建测试表 信息表\r","CREATE TABLE mes(\r","\tid INT , \r","\tcontent VARCHAR(30), \r","\tsend_time DATETIME);\r","\t\r","\t\r","-- 添加一条记录\r","INSERT INTO mes \r","\tVALUES(1, '北京新闻', CURRENT_TIMESTAMP()); \r","INSERT INTO mes VALUES(2, '上海新闻', NOW());\r","INSERT INTO mes VALUES(3, '广州新闻', NOW());\r","\r","SELECT * FROM mes;\r","SELECT NOW() FROM DUAL;\r","\r","-- 上应用实例\r","-- 显示所有新闻信息，发布日期只显示 日期，不用显示时间.\r","SELECT id, content, DATE(send_time) \r","\tFROM mes;\r","-- 请查询在10分钟内发布的新闻, 思路一定要梳理一下.\r","SELECT * \r","\tFROM mes\r","\tWHERE DATE_ADD(send_time, INTERVAL 10 MINUTE) \u003e= NOW()\r","\r","SELECT * \r","\tFROM mes\r","\tWHERE send_time \u003e= DATE_SUB(NOW(), INTERVAL 10 MINUTE) \r","\r","-- 请在mysql 的sql语句中求出 2011-11-11 和 1990-1-1 相差多少天\r","SELECT DATEDIFF('2011-11-11', '1990-01-01') FROM DUAL;\r","-- 请用mysql 的sql语句求出你活了多少天? [练习] 1986-11-11 出生\r","SELECT DATEDIFF(NOW(), '1986-11-11') FROM DUAL;\r","-- 如果你能活80岁，求出你还能活多少天.[练习] 1986-11-11 出生\r","-- 先求出活80岁 时, 是什么日期 X\r","-- 然后在使用 datediff(x, now()); 1986-11-11-\u003edatetime\r","-- INTERVAL 80 YEAR ： YEAR 可以是 年月日，时分秒\r","-- '1986-11-11' 可以date,datetime timestamp \r","SELECT DATEDIFF(DATE_ADD('1986-11-11', INTERVAL 80 YEAR), NOW()) \r","\tFROM DUAL;\r","\t\r","SELECT TIMEDIFF('10:11:11', '06:10:10') FROM DUAL;\r","\r","-- YEAR|Month|DAY|DATE (datetime)\r","SELECT YEAR(NOW()) FROM DUAL;\r","SELECT MONTH(NOW()) FROM DUAL;\r","SELECT DAY(NOW()) FROM DUAL;\r","SELECT MONTH('2013-11-10') FROM DUAL;\r","-- unix_timestamp() : 返回的是1970-1-1 到现在的秒数\r","SELECT UNIX_TIMESTAMP() FROM DUAL;\r","-- FROM_UNIXTIME() : 可以把一个unix_timestamp 秒数[时间戳]，转成指定格式的日期\r","-- %Y-%m-%d 格式是规定好的，表示年月日\r","-- 意义：在开发中，可以存放一个整数，然后表示时间，通过FROM_UNIXTIME转换\r","--   \r","SELECT FROM_UNIXTIME(1618483484, '%Y-%m-%d') FROM DUAL;\r","SELECT FROM_UNIXTIME(1618483100, '%Y-%m-%d %H:%i:%s') FROM DUAL;\r","\r","SELECT * FROM mysql.user \\G \r","```\r","\r","## 加密和系统函数\r","\r","![](https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/image-20230511213738467.png)\r","\r","```sql\r","-- 演示加密函数和系统函数\r","\r","-- USER()\t查询用户\r","-- 可以查看登录到mysql的有哪些用户，以及登录的IP\r","SELECT USER() FROM DUAL; -- 返回 用户@IP地址\r","-- DATABASE()\t查询当前使用数据库名称\r","SELECT DATABASE();\r","\r","-- MD5(str)\t为字符串算出一个 MD5 32的字符串，常用(用户密码)加密\r","-- root 密码是 timerring -\u003e 加密md5 -\u003e 在数据库中存放的是加密后的密码\r","SELECT MD5('timerring') FROM DUAL;\r","SELECT LENGTH(MD5('timerring')) FROM DUAL;\r","\r","-- 演示用户表，存放密码时，是md5\r","CREATE TABLE timerring_user\r","\t(id INT , \r","\t`name` VARCHAR(32) NOT NULL DEFAULT '', \r","\tpwd CHAR(32) NOT NULL DEFAULT '');\r","INSERT INTO timerring_user \r","\tVALUES(100, '谈莫瑞', MD5('timerring'));\r","SELECT * FROM timerring_user;\r","\r","SELECT * FROM timerring_user  -- SQL注入问题\r","\tWHERE `name`='谈莫瑞' AND pwd = MD5('timerring')  \r","\r","\r","-- PASSWORD(str) -- 加密函数, MySQL数据库的用户密码就是 PASSWORD函数加密\r","\r","SELECT PASSWORD('timerring') FROM DUAL; -- 数据库的 *81220D972A52D4C51BB1C37518A2613706220DAC\r","\r","\r","-- select * from mysql.user \\G \t从原文密码str 计算并返回密码字符串\r","-- 通常用于对mysql数据库的用户密码加密\r","-- mysql.user 表示 数据库.表 \r","SELECT * FROM mysql.user\r","```\r","\r","## 流程控制函数\r","\r","![](https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/image-20230511213446566.png)\r","\r","```sql\r","# 演示流程控制语句\r","\r","# IF(expr1,expr2,expr3)\t如果expr1为True ,则返回 expr2 否则返回 expr3\r","SELECT IF(TRUE, '北京', '上海') FROM DUAL;\r","# IFNULL(expr1,expr2)\t如果expr1不为空NULL,则返回expr1,否则返回expr2\r","SELECT IFNULL( NULL, '教育') FROM DUAL;\r","# SELECT CASE WHEN expr1 THEN expr2 WHEN expr3 THEN expr4 ELSE expr5 END; [类似多重分支.]\r","# 如果expr1 为TRUE,则返回expr2,如果expr2 为t, 返回 expr4, 否则返回 expr5\r","\r","SELECT CASE \r","\tWHEN TRUE THEN 'jack'  -- jack\r","\tWHEN FALSE THEN 'tom' \r","\tELSE 'mary' END\r","\r","-- 1. 查询emp 表, 如果 comm 是null , 则显示0.0\r","--    老师说明，判断是否为null 要使用 is null, 判断不为空 使用 is not\r","SELECT ename, IF(comm IS NULL , 0.0, comm)\r","\tFROM emp;\r","SELECT ename, IFNULL(comm, 0.0)\r","\tFROM emp;\r","-- 2. 如果emp 表的 job 是 CLERK 则显示 职员， 如果是 MANAGER 则显示经理\r","--     如果是 SALESMAN 则显示 销售人员，其它正常显示\r","\r","SELECT ename, (SELECT CASE \r","\t\tWHEN job = 'CLERK' THEN '职员' \r","\t\tWHEN job = 'MANAGER' THEN '经理'\r","\t\tWHEN job = 'SALESMAN' THEN '销售人员' \r","\t\tELSE job END) AS 'job'\r","\tFROM emp; \r","\r","SELECT * FROM emp;\r","SELECT * FROM dept;\r","SELECT * FROM salgrade;\r","```\r","\r","## mysql 表查询--加强\r","\r","### 介绍\r","\r","```sql\r","-- 查询加强\r","-- ■ 使用where子句\r","-- \t?如何查找1992.1.1后入职的员工\r","-- 老师说明： 在mysql中,日期类型可以直接比较, 需要注意格式\r","SELECT * FROM emp\r","\tWHERE hiredate \u003e '1992-01-01'\r","-- ■ 如何使用like操作符(模糊)\r","-- \t%: 表示0到多个任意字符 _: 表示单个任意字符\r","-- \t?如何显示首字符为S的员工姓名和工资\r","SELECT ename, sal FROM emp\r","\tWHERE ename LIKE 'S%'\r","-- \t?如何显示第三个字符为大写O的所有员工的姓名和工资\r","SELECT ename, sal FROM emp\r","\tWHERE ename LIKE '__O%'\r","\r","-- ■ 如何显示没有上级的雇员的情况\r","SELECT * FROM emp\r","\tWHERE mgr IS NULL;\r","-- ■ 查询表结构 \r","DESC emp \r","\r","-- 使用order by子句\r","--   ?如何按照工资的从低到高的顺序[升序]，显示雇员的信息\r","SELECT * FROM emp\r","\tORDER BY sal \r","--   ?按照部门号升序而雇员的工资降序排列 , 显示雇员信息\r","\r","SELECT * FROM emp\r","\tORDER BY deptno ASC , sal DESC;\r","```\r","\r","### 分页查询\r","\r","基本语法: `select.... limit start, rows`\r","表示从`start+1`行开始取,取出`rows`行,  `start` 从0开始计算\r","\r","```sql\r","-- 分页查询\r","-- 按雇员的id号升序取出， 每页显示3条记录，请分别显示 第1页，第2页，第3页\r","\r","-- 第1页\r","SELECT * FROM emp \r","\tORDER BY empno \r","\tLIMIT 0, 3;\r","-- 第2页\r","SELECT * FROM emp \r","\tORDER BY empno \r","\tLIMIT 3, 3;\r","-- 第3页\r","SELECT * FROM emp \r","\tORDER BY empno \r","\tLIMIT 6, 3;\r","-- 推导一个公式 \r","SELECT * FROM emp\r","\tORDER BY empno \r","\tLIMIT 每页显示记录数 * (第几页-1) , 每页显示记录数\r","\t\r","-- 测试\r","SELECT job, COUNT(*) FROM emp GROUP BY job;\r","-- 显示雇员总数，以及获得补助的雇员数\r","SELECT COUNT(*) FROM emp  WHERE mgr IS NOT NULL;\r","SELECT MAX(sal) - MIN(sal) FROM emp;\r","```\r","\r","### 使用分组函数和分组子句\r","\r","```sql\r","-- 增强group by 的使用\r","\r","-- (1) 显示每种岗位的雇员总数、平均工资。\r","SELECT COUNT(*), AVG(sal), job \r","\tFROM emp \r","\tGROUP BY job; \r","-- (2) 显示雇员总数，以及获得补助的雇员数。\r","--  思路: 获得补助的雇员数 就是 comm 列为非null, 就是count(列)，如果该列的值为null, 是不会统计 , SQL 非常灵活，需要我们动脑筋.\r","SELECT COUNT(*), COUNT(comm)\r","\tFROM emp \r","\r","--  老师的扩展要求：统计没有获得补助的雇员数\r","SELECT COUNT(*), COUNT(IF(comm IS NULL, 1, NULL))\r","\tFROM emp \r","\r","SELECT COUNT(*), COUNT(*) - COUNT(comm)\r","\tFROM emp \r","\r","-- (3) 显示管理者的总人数。小技巧:尝试写-\u003e修改-\u003e尝试[正确的]\r","SELECT COUNT(DISTINCT mgr) \r","\tFROM emp; \r","\r","-- (4) 显示雇员工资的最大差额。\r","-- 思路： max(sal) - min(sal)\r","SELECT MAX(sal) - MIN(sal) \r","\tFROM emp;\r","\r","SELECT * FROM e\r","mp;\r","select * from dept;\r","\r","\r","\r","-- 应用案例：请统计各个部门group by 的平均工资 avg，\r","-- 并且是大于1000的 having，并且按照平均工资从高到低排序， order by\r","-- 取出前两行记录 limit 0, 2\r","\r","SELECT deptno, AVG(sal) AS avg_sal\r","\tFROM emp\r","\tGROUP BY deptno\r","\tHAVING  avg_sal \u003e 1000\r","\tORDER BY avg_sal DESC\r","\tLIMIT 0,2 \r","```\r","\r","### 数据分组的总结\r","\r","如果select语句同时包含有group by ,having , limitorder by那么他们的顺序是`group by , having , orderby, limit`\r","\r","![](https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/image-20230511215948687.png)\r","\r","## mysql 多表查询\r","\r","### 多表查询练习\r","\r","在默认情况下:当两个表查询时，规则\r","\r","1. 从第一张表中，取出一行和第二张表的每一行进行组合,返回结果[含有两张表的所有列].\r","2. 一共返回的记录数第一张表行数*第二张表的行数（**笛卡尔积**）\r","\r","```sql\r","-- 多表查询\r","-- ?显示雇员名,雇员工资及所在部门的名字 【笛卡尔集】\r","/*\r","\t1. 雇员名,雇员工资 来自 emp表\r","\t2. 部门的名字 来自 dept表\r","\t3. 需求对 emp 和 dept查询  ename,sal,dname,deptno\r","\t4. 当我们需要指定显示某个表的列是，需要 表.列表\r","*/\r","SELECT ename,sal,dname,emp.deptno\r","\tFROM emp, dept \r","\tWHERE emp.deptno = dept.deptno\r","\t\r","select * from emp;\r","select * from dept;\r","select * from salgrade;\r","-- 小技巧：多表查询的条件不能少于 表的个数-1, 否则会出现笛卡尔集\r","-- ?如何显示部门号为10的部门名、员工名和工资 \r","-- 重复的deptno要标清是哪个表的\r","SELECT ename,sal,dname,emp.deptno\r","\tFROM emp, dept \r","\tWHERE emp.deptno = dept.deptno and emp.deptno = 10\r","\r","-- ?显示各个员工的姓名，工资，及其工资的级别\r","\r","-- 思路 姓名，工资 来自 emp 13\r","--      工资级别 salgrade 5\r","-- 写sql , 先写一个简单，然后加入过滤条件...\r","select ename, sal, grade \r","\tfrom emp , salgrade\r","\twhere sal between losal and hisal; \r","```\r","\r","### 自连接\r","\r","自连接是指在同一张表的连接查询[将同一张表看做两张表]。\r","\r","```sql\r","-- 多表查询的 自连接\r","\r","-- 思考题: 显示公司员工名字和他的上级的名字\r","\r","-- 老韩分析： 员工名字 在emp, 上级的名字的名字 emp\r","-- 员工和上级是通过 emp 表的 mgr 列关联\r","-- 这里老师小结：\r","-- 自连接的特点 1. 把同一张表当做两张表使用\r","--             2. 需要给表取别名 表名  表别名 \r","-- 3. 列名不明确，可以指定列的别名 列名 as 列的别名\t\t\r","SELECT worker.ename AS '职员名' ,  boss.ename AS '上级名'\r","\tFROM emp worker, emp boss -- 同一张表用不同的别名\r","\tWHERE worker.mgr = boss.empno;\r","SELECT * FROM emp;\r","```\r","\r","## mysql 表子查询\r","\r","### 什么是子查询\r","\r","子查询是指嵌入在其它 sql 语句中的select 语句,也叫嵌套查询\r","\r","### 单行子查询\r","\r","单行子查询是指只返回一行数据的子查询语句\r","\r","### 多行子查询\r","\r","多行子查询指返回多行数据的子查询    使用关键字`in`\r","\r","```sql\r","-- 子查询的演示\r","-- 请思考：如何显示与SMITH同一部门的所有员工?\r","/*\r","\t1. 先查询到 SMITH的部门号得到\r","\t2. 把上面的select 语句当做一个子查询来使用\r","*/\r","SELECT deptno \r","\tFROM emp \r","\tWHERE ename = 'SMITH'\r","\r","-- 下面的答案.\t\r","SELECT * \r","\tFROM emp\r","\tWHERE deptno = (\r","\t\tSELECT deptno \r","\t\tFROM emp \r","\t\tWHERE ename = 'SMITH'\r","\t)\r","\r","-- 课堂练习:如何查询和部门10的工作相同的雇员的\r","-- 名字、岗位、工资、部门号, 但是不含10号部门自己的雇员.\r","\r","/*\r","\t1. 查询到10号部门有哪些工作\r","\t2. 把上面查询的结果当做子查询使用\r","*/\r","select distinct job \r","\tfrom emp \r","\twhere deptno = 10;\r","\t\r","--  下面语句完整\r","\r","select ename, job, sal, deptno\r","\tfrom emp\r","\twhere job in (\r","\t\tSELECT DISTINCT job \r","\t\tFROM emp \r","\t\tWHERE deptno = 10\r","\t) and deptno \u003c\u003e 10 \r","```\r","\r","### 子查询当做临时表使用\r","\r","可以将子查询当做一张临时表使用\r","\r","```sql\r","-- 子查询练习\r","\r","-- 请思考：查找每个部门工资高于本部门平均工资的人的资料\r","-- 这里要用到数据查询的小技巧，把一个子查询当作一个临时表使用\r","\r","-- 1. 先得到每个部门的 部门号和 对应的平均工资\r","\r","SELECT deptno, AVG(sal) AS avg_sal\r","\tFROM emp GROUP BY deptno\r","\t\r","-- 2. 把上面的结果当做子查询，作为temp表, 和 emp 进行多表查询    \r","SELECT ename, sal, temp.avg_sal, emp.deptno\r","\tFROM emp, (\r","\t\tSELECT deptno, AVG(sal) AS avg_sal\r","\t\tFROM emp \r","\t\tGROUP BY deptno\r","\t) temp \r","\twhere emp.deptno = temp.deptno and emp.sal \u003e temp.avg_sal\r","\t\r","-- 查找每个部门工资最高的人的详细资料\r","\r","SELECT ename, sal, temp.max_sal, emp.deptno\r","\tFROM emp, (\r","\t\tSELECT deptno, max(sal) AS max_sal\r","\t\tFROM emp \r","\t\tGROUP BY deptno\r","\t) temp \r","\tWHERE emp.deptno = temp.deptno AND emp.sal = temp.max_sal\r","\t\r","\r","-- 查询每个部门的信息(包括：部门名,编号,地址)和人员数量,我们一起完成。\r","\r","-- 1. 部门名,编号,地址 来自 dept表\r","-- 2. 各个部门的人员数量 -》 构建一个临时表\r","\r","select count(*), deptno \r","\tfrom emp\r","\tgroup by deptno;\r","\t\r","\r","select dname, dept.deptno, loc , tmp.per_num as '人数'\r","\tfrom dept, (\r","\t\tSELECT COUNT(*) as per_num, deptno \r","\t\tFROM emp\r","\t\tGROUP BY deptno\r","\t) tmp \r","\twhere tmp.deptno = dept.deptno\r","\r","-- 还有一种写法 表.* 表示将该表所有列都显示出来, 可以简化sql语句\r","-- 在多表查询中，当多个表的列不重复时，才可以直接写列名\r","\r","SELECT tmp.* , dname, loc\r","\tFROM dept, (\r","\t\tSELECT COUNT(*) AS per_num, deptno \r","\t\tFROM emp\r","\t\tGROUP BY deptno\r","\t) tmp \r","\tWHERE tmp.deptno = dept.deptno\r","```\r","\r","### 在多行子查询中使用 all 操作符\r","\r","### 在多行子查询中使用 any 操作符\r","\r","```sql\r","-- all 和 any的使用\r","\r","-- 请思考:显示工资比部门30的所有员工的工资高的员工的姓名、工资和部门号\r","\r","SELECT ename, sal, deptno\r","\tFROM emp\r","\tWHERE sal \u003e ALL(\r","\t\tSELECT sal \r","\t\t\tFROM emp\r","\t\t\tWHERE deptno = 30\r","\t\t) \r","-- 可以这样写\r","SELECT ename, sal, deptno\r","\tFROM emp\r","\tWHERE sal \u003e (\r","\t\tSELECT MAX(sal) \r","\t\t\tFROM emp\r","\t\t\tWHERE deptno = 30\r","\t\t) \r","\r","-- 请思考:如何显示工资比部门30的其中一个员工的工资高的员工的姓名、工资和部门号\r","\r","SELECT ename, sal, deptno\r","\tFROM emp\r","\tWHERE sal \u003e any(\r","\t\tSELECT sal \r","\t\t\tFROM emp\r","\t\t\tWHERE deptno = 30\r","\t\t)\r","\r"," SELECT ename, sal, deptno\r","\tFROM emp\r","\tWHERE sal \u003e (\r","\t\tSELECT min(sal) \r","\t\t\tFROM emp\r","\t\t\tWHERE deptno = 30\r","\t\t)\r","\r","\r","-- 查询ecshop中各个类别中，价格最高的商品\r","\r","-- 查询 商品表\r","-- 先得到 各个类别中，价格最高的商品 max + group by cat_id, 当做临时表\r","-- 把子查询当做一张临时表可以解决很多很多复杂的查询\r","\r","select cat_id , max(shop_price) \r","\tfrom ecs_goods\r","\tgroup by cat_id\r","\t\r","\t\r","-- 这个最后答案\t\r","select goods_id, ecs_goods.cat_id, goods_name, shop_price \r","\tfrom (\r","\t\tSELECT cat_id , MAX(shop_price) as max_price\r","\t\tFROM ecs_goods\r","\t\tGROUP BY cat_id\r","\t) temp , ecs_goods\r","\twhere  temp.cat_id = ecs_goods.cat_id \r","\tand temp.max_price = ecs_goods.shop_price \r","```\r","\r","### 多列子查询\r","\r","多列子查序则是指查询返回多个列数据的子查询语句\r","\r","```sql\r","-- 多列子查询\r","\r","-- 请思考如何查询与allen的部门和岗位完全相同的所有雇员(并且不含allen本人)\r","-- (字段1， 字段2 ...) = (select 字段 1，字段2 from 。。。。)\r","\r","-- 分析: 1. 得到smith的部门和岗位\r","\r","SELECT deptno , job\r","\tFROM emp \r","\tWHERE ename = 'ALLEN'\r","\t\r","-- 分析: 2  把上面的查询当做子查询来使用，并且使用多列子查询的语法进行匹配\r","SELECT * \r","\tFROM emp\r","\tWHERE (deptno , job) = (\r","\t\tSELECT deptno , job\r","\t\tFROM emp \r","\t\tWHERE ename = 'ALLEN'\r","\t) AND ename != 'ALLEN'\r","\r","\r","\r","-- 请查询 和宋江数学，英语，语文   \r","-- 成绩 完全相同的学生\r","SELECT * \r","\tFROM student\r","\tWHERE (math, english, chinese) = (\r","\t\tSELECT math, english, chinese\r","\t\tFROM student\r","\t\tWHERE `name` = '宋江'\r","\t)\r","\r","SELECT * FROM student;\r","```\r","\r","### 在from 子句中使用子查询\r","\r","```sql\r","-- 子查询练习\r","\r","-- 请思考：查找每个部门工资高于本部门平均工资的人的资料\r","-- 这里要用到数据查询的小技巧，把一个子查询当作一个临时表使用\r","\r","-- 1. 先得到每个部门的 部门号和 对应的平均工资\r","\r","SELECT deptno, AVG(sal) AS avg_sal\r","\tFROM emp GROUP BY deptno\r","\t\r","-- 2. 把上面的结果当做子查询, 和 emp 进行多表查询\r","--    \r","SELECT ename, sal, temp.avg_sal, emp.deptno\r","\tFROM emp, (\r","\t\tSELECT deptno, AVG(sal) AS avg_sal\r","\t\tFROM emp \r","\t\tGROUP BY deptno\r","\t) temp \r","\twhere emp.deptno = temp.deptno and emp.sal \u003e temp.avg_sal\r","\t\r","-- 查找每个部门工资最高的人的详细资料\r","\r","SELECT ename, sal, temp.max_sal, emp.deptno\r","\tFROM emp, (\r","\t\tSELECT deptno, max(sal) AS max_sal\r","\t\tFROM emp \r","\t\tGROUP BY deptno\r","\t) temp \r","\tWHERE emp.deptno = temp.deptno AND emp.sal = temp.max_sal\r","\t\r","\r","-- 查询每个部门的信息(包括：部门名,编号,地址)和人员数量,我们一起完成。\r","\r","-- 1. 部门名,编号,地址 来自 dept表\r","-- 2. 各个部门的人员数量 -》 构建一个临时表\r","\r","select count(*), deptno \r","\tfrom emp\r","\tgroup by deptno;\r","\t\r","\r","select dname, dept.deptno, loc , tmp.per_num as '人数'\r","\tfrom dept, (\r","\t\tSELECT COUNT(*) as per_num, deptno \r","\t\tFROM emp\r","\t\tGROUP BY deptno\r","\t) tmp \r","\twhere tmp.deptno = dept.deptno\r","\r","-- 还有一种写法 表.* 表示将该表所有列都显示出来, 可以简化sql语句\r","-- 在多表查询中，当多个表的列不重复时，才可以直接写列名\r","\r","SELECT tmp.* , dname, loc\r","\tFROM dept, (\r","\t\tSELECT COUNT(*) AS per_num, deptno \r","\t\tFROM emp\r","\t\tGROUP BY deptno\r","\t) tmp \r","\tWHERE tmp.deptno = dept.deptno\r","```\r","\r","## 表复制\r","\r","### 自我复制数据(蠕虫复制)\r","\r","有时，为了对某个sql语句进行效率测试，我们需要海量数据时，可以使用此法为表创建海量数据。\r","\r","```sql\r","-- 表的复制\r","-- 为了对某个sql语句进行效率测试，我们需要海量数据时，可以使用此法为表创建海量数据\r","\r","CREATE TABLE my_tab01 \r","\t( id INT,\r","\t  `name` VARCHAR(32),\r","\t  sal DOUBLE,\r","\t  job VARCHAR(32),\r","\t  deptno INT);\r","DESC my_tab01\r","SELECT * FROM my_tab01;\r","\r","-- 演示如何自我复制\r","-- 1. 先把emp 表的记录复制到 my_tab01\r","INSERT INTO my_tab01 \r","\t(id, `name`, sal, job,deptno)\r","\tSELECT empno, ename, sal, job, deptno FROM emp;\r","-- 2. 自我复制\r","INSERT INTO my_tab01\r","\tSELECT * FROM my_tab01;\r","SELECT COUNT(*) FROM my_tab01;\r","\r","-- 如何删除掉一张表重复记录\r","-- 1. 先创建一张表 my_tab02, \r","-- 2. 让 my_tab02 有重复的记录\r","\r","CREATE TABLE my_tab02 LIKE emp; -- 这个语句 把emp表的结构(列)，复制到my_tab02\r","\r","desc my_tab02;\r","\r","insert into my_tab02\r","\tselect * from emp;\r","select * from my_tab02;\r","-- 3. 考虑去重 my_tab02的记录\r","/*\r","\t思路 \r","\t(1) 先创建一张临时表 my_tmp , 该表的结构和 my_tab02一样\r","\t(2) 把my_tmp 的记录 通过 distinct 关键字 处理后 把记录复制到 my_tmp\r","\t(3) 清除掉 my_tab02 记录\r","\t(4) 把 my_tmp 表的记录复制到 my_tab02\r","\t(5) drop 掉 临时表my_tmp\r","*/\r","-- (1) 先创建一张临时表 my_tmp , 该表的结构和 my_tab02一样\r","\r","create table my_tmp like my_tab02\r","-- (2) 把my_tmp 的记录 通过 distinct 关键字 处理后 把记录复制到 my_tmp\r","insert into my_tmp \r","\tselect distinct * from my_tab02;\r","\r","-- (3) 清除掉 my_tab02 记录\r","delete from my_tab02;\r","-- (4) 把 my_tmp 表的记录复制到 my_tab02\r","insert into my_tab02\r","\tselect * from my_tmp;\r","-- (5) drop 掉 临时表my_tmp\r","drop table my_tmp;\r","\r","select * from my_tab02;\r","```\r","\r","## 合并查询\r","\r","### 介绍\r","\r","有时在实际应用中，为了合并多个 `select` 语句的结果，可以使用集合操作符号 `union` , `union all`。\r","\r","+ union all：该操作符用于取得两个结果集的并集。当使用该操作符时，不会取消重复行。\r","+ union：该操作赋与union all相似,但是会自动去掉结果集中重复行\r","\r","```sql\r","-- 合并查询\r","SELECT ename,sal,job FROM emp WHERE sal\u003e2500 -- 5\r","SELECT ename,sal,job FROM emp WHERE job='MANAGER' -- 3\r","\r","-- union all 就是将两个查询结果合并，不会去重\r","SELECT ename,sal,job FROM emp WHERE sal\u003e2500 -- 5\r","UNION ALL\r","SELECT ename,sal,job FROM emp WHERE job='MANAGER' -- 3\r","\r","-- union  就是将两个查询结果合并，会去重\r","SELECT ename,sal,job FROM emp WHERE sal\u003e2500 -- 5\r","UNION \r","SELECT ename,sal,job FROM emp WHERE job='MANAGER' -- 3\r","```\r","\r","## mysql 表外连接\r","\r","前面我们学习的查询，是利用where子句对两张表或者多张表，形成的笛卡尔积进行筛选,根据关联条件，显示所有匹配的记录，匹配不上的，不显示。比如:列出部门名称和这些部门的员工名称和工作，同时要求显示出那些没有员工的部门。\r","\r","### 外连接\r","\r","1. 左外连接(如果左侧的表完全显示我们就说是左外连接)\r","\r","2. 右外连接(如果右侧的表完全显示我们就说是右外连接)\r","\r","![](https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/image-20230511224810092.png)\r","\r","+ 使用左连接(显示所有人的成绩，如果没有成绩，也要显示该人的姓名和id号,成绩显示为空)select .. from表1 left join表2 on条件[表1:就是左表表2:就是右表]。\r","+ 使用右外连接(显示所有成绩,如果没有名字匹配,显示空)\r","  select .. from 表1 right join表2 on条件[表1:就是左表表2:就是右表]\r","\r","```sql\r","-- 外连接\r","\r","-- 比如：列出部门名称和这些部门的员工名称和工作，\r","-- 同时要求 显示出那些没有员工的部门。\r","\r","-- 使用我们学习过的多表查询的SQL， 看看效果如何?\r","\r","SELECT dname, ename, job \r","\tFROM emp, dept\r","\tWHERE emp.deptno = dept.deptno\r","\tORDER BY dname\r","SELECT * FROM dept;\r","\r","SELECT * FROM emp;\r","\r","\r","-- 创建 stu\r","/*\r","id  name   \r","1   Jack\r","2   Tom\r","3   Kity\r","4   nono\r","*/\r","CREATE TABLE stu (\r","\tid INT,\r","\t`name` VARCHAR(32));\r","INSERT INTO stu VALUES(1, 'jack'),(2,'tom'),(3, 'kity'),(4, 'nono');\r","SELECT * FROM stu;\r","-- 创建 exam\r","/*\r","id   grade\r","1    56\r","2    76\r","11   8\r","\r","*/\r","CREATE TABLE exam(\r","\tid INT,\r","\tgrade INT);\r","INSERT INTO exam VALUES(1, 56),(2,76),(11, 8);\r","SELECT * FROM exam;\r","\r","-- 使用左连接\r","-- （显示所有人的成绩，如果没有成绩，也要显示该人的姓名和id号,成绩显示为空）\r","\r","SELECT `name`, stu.id, grade\r","\tFROM stu, exam\r","\tWHERE stu.id = exam.id;\r","\t\r","-- 改成左外连接\r","SELECT `name`, stu.id, grade\r","\tFROM stu LEFT JOIN exam\r","\tON stu.id = exam.id;\r","\t\r","\t\r","-- 使用右外连接（显示所有成绩，如果没有名字匹配，显示空)\r","-- 即：右边的表(exam) 和左表没有匹配的记录，也会把右表的记录显示出来\r","SELECT `name`, stu.id, grade\r","\tFROM stu RIGHT JOIN exam\r","\tON stu.id = exam.id;\r","\r","-- 列出部门名称和这些部门的员工信息(名字和工作)，\r","-- 同时列出那些没有员工的部门名。5min\r","-- 使用左外连接实现\r","SELECT dname, ename, job\r","\tFROM dept LEFT JOIN emp\r","\tON dept.deptno = emp.deptno\r","\t\r","-- 使用右外连接实现\r","\r","SELECT dname, ename, job\r","\tFROM emp RIGHT JOIN dept\r","\tON dept.deptno = emp.deptno\r","```\r","\r","## mysql 约束\r","\r","### 基本介绍\r","\r","**约束**用于确保数据库的数据满足特定的商业规则。在mysql中，约束包括: not null、unique, primary key, foreign key, 和 check 五种.\r","\r","### primary key(主键)\r","\r","字段名  字段类型  primary key  （表示该字段为主键）\r","\r","用于唯一的标示表行的数据,当定义主键约束后，**该列不能重复**\r","\r","+ primary key不能重复而且不能为null.\r","+ 一张表最多只能有一个主键,但可以是复合主键\r","+ 主键的指定方式有两种\r","  + 直接在字段名后指定:字段名primakry key\r","  + 在表定义最后写primary key(列名);\r","+ 使用 **desc 表名**，可以看到primary key的情况。\r","+ 在实际开发中，每个表往往都会设计一个主键。\r","\r","```sql\r","-- 主键使用\r","\r","-- id\tname \temail\r","CREATE TABLE t17\r","\t(id INT PRIMARY KEY, -- 表示id列是主键 \r","\t`name` VARCHAR(32),\r","\temail VARCHAR(32));\r","\t\r","-- 主键列的值是不可以重复\r","INSERT INTO t17\r","\tVALUES(1, 'jack', 'jack@sohu.com');\r","INSERT INTO t17\r","\tVALUES(2, 'tom', 'tom@sohu.com');\r","\r","INSERT INTO t17\r","\tVALUES(1, 'hsp', 'hsp@sohu.com'); -- 报错\r","\t\r","SELECT * FROM t17;\r","\r","-- 主键使用的细节讨论\r","-- primary key不能重复而且不能为 null。\r","INSERT INTO t17\r","\tVALUES(NULL, 'hsp', 'hsp@sohu.com');\r","-- 一张表最多只能有一个主键, 但可以是复合主键(比如 id+name)\r","CREATE TABLE t18\r","\t(id INT PRIMARY KEY, -- 表示id列是主键 \r","\t`name` VARCHAR(32), PRIMARY KEY -- 错误的\r","\temail VARCHAR(32));\r","-- 演示复合主键 (id 和 name 做成复合主键)\r","CREATE TABLE t18\r","\t(id INT , \r","\t`name` VARCHAR(32), \r","\temail VARCHAR(32),\r","\tPRIMARY KEY (id, `name`) -- 这里就是复合主键\r","\t);\r","\r","INSERT INTO t18\r","\tVALUES(1, 'tom', 'tom@sohu.com');\r","INSERT INTO t18\r","\tVALUES(1, 'jack', 'jack@sohu.com');\r","INSERT INTO t18\r","\tVALUES(1, 'tom', 'xx@sohu.com'); -- 这里就违反了复合主键\r","SELECT * FROM t18;\r","\r","-- 主键的指定方式 有两种 \r","-- 1. 直接在字段名后指定：字段名  primakry key\r","-- 2. 在表定义最后写 primary key(列名); \r","CREATE TABLE t19\r","\t(id INT , \r","\t`name` VARCHAR(32) PRIMARY KEY, \r","\temail VARCHAR(32)\r","\t);\r","\r","CREATE TABLE t20\r","\t(id INT , \r","\t`name` VARCHAR(32) , \r","\temail VARCHAR(32),\r","\tPRIMARY KEY(`name`) -- 在表定义最后写 primary key(列名)\r","\t);\r"," \r","-- 使用desc 表名，可以看到primary key的情况\r","\r","DESC t20 -- 查看 t20表的结果，显示约束的情况\r","DESC t18\r","```\r","\r","### not null(非空)\r","\r","如果在列上定义了not null, 那么当插入数据时，必须为列提供数据。\r","\r","`字段名 字段类型 not null`\r","\r","### unique(唯一)\r","\r","当定义了唯一约束后，该列值是不能重复的。\r","\r","`字段名 字段类型 unique`\r","\r","1. 如果没有指定not null，则unique字段**可以有多个null**\r","2. 一张表可以有多个unique字段\r","\r","```sql\r","-- unique的使用\r","\r","CREATE TABLE t21\r","\t(id INT UNIQUE ,  -- 表示 id 列是不可以重复的.\r","\t`name` VARCHAR(32) , \r","\temail VARCHAR(32)\r","\t);\r","\t\r","INSERT INTO t21\r","\tVALUES(1, 'jack', 'jack@sohu.com');\r","\r","INSERT INTO t21\r","\tVALUES(1, 'tom', 'tom@sohu.com');\r","\t\r","-- unqiue使用细节\r","-- 1. 如果没有指定 not null , 则 unique 字段可以有多个null\r","-- 如果一个列(字段)， 是 unique not null 使用效果类似 primary key\r","INSERT INTO t21\r","\tVALUES(NULL, 'tom', 'tom@sohu.com');\r","SELECT * FROM t21;\r","-- 2. 一张表可以有多个unique字段\r","\r","CREATE TABLE t22\r","\t(id INT UNIQUE ,  -- 表示 id 列是不可以重复的.\r","\t`name` VARCHAR(32) UNIQUE , -- 表示name不可以重复 \r","\temail VARCHAR(32)\r","\t);\r","DESC t22\r","```\r","\r","### foreign key(外键)\r","\r","用于定义主表和从表之间的关系: \r","\r","+ 外键约束要定义在从表上，主表则必须具有主键约束或是unique约束,\r","+ 当定义外键约束后，要求外键列数据必须在主表的主键列存在或是为null(学生/班级图示)。\r","\r","![](https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/image-20230511231307720.png)\r","\r","```sql\r","-- 外键演示\r","\r","-- 创建 主表 my_class\r","CREATE TABLE my_class (\r","\tid INT PRIMARY KEY , -- 班级编号\r","\t`name` VARCHAR(32) NOT NULL DEFAULT '');\r","\r","-- 创建 从表 my_stu\r","CREATE TABLE my_stu (\r","\tid INT PRIMARY KEY , -- 学生编号\r","\t`name` VARCHAR(32) NOT NULL DEFAULT '',\r","\tclass_id INT , -- 学生所在班级的编号\r","\t-- 下面指定外键关系\r","\tFOREIGN KEY (class_id) REFERENCES my_class(id))\r","-- 测试数据\r","INSERT INTO my_class \r","\tVALUES(100, 'java'), (200, 'web');\r","INSERT INTO my_class \r","\tVALUES(300, 'php');\r","\t\r","SELECT * FROM my_class;\r","INSERT INTO my_stu \r","\tVALUES(1, 'tom', 100);\r","INSERT INTO my_stu \r","\tVALUES(2, 'jack', 200);\r","INSERT INTO my_stu \r","\tVALUES(3, 'hsp', 300);\r","INSERT INTO my_stu \r","\tVALUES(4, 'mary', 400); -- 这里会失败...因为400班级不存在\r","\r","INSERT INTO my_stu \r","\tVALUES(5, 'king', NULL); -- 可以, 外键 没有写 not null\r","SELECT * FROM my_class;\r","\r","-- 一旦建立主外键的关系，数据不能随意删除了\r","DELETE FROM my_class\r","\tWHERE id = 100; \r","```\r","\r","### check\r","\r","用于强制行数据必须满足的条件,假定在sal列上定义了check约束,并要求sal列值在1000 \\~2000之间，如果不在1000\\~2000之间就会提示出错。\r","\r","提示:oracle和 sql server 均支持check ,但是mysql5.7目前还不支持check ,只做语法校验，但不会生效。\r","\r","```sql\r","-- 演示check的使用\r","-- mysql5.7目前还不支持check ,只做语法校验，但不会生效\r","-- 了解 \r","-- 学习 oracle, sql server, 这两个数据库是真的生效.\r","\r","-- 测试\r","CREATE TABLE t23 (\r","\tid INT PRIMARY KEY,\r","\t`name` VARCHAR(32) ,\r","\tsex VARCHAR(6) CHECK (sex IN('man','woman')),\r","\tsal DOUBLE CHECK ( sal \u003e 1000 AND sal \u003c 2000)\r","\t);\r","\t\r","-- 添加数据\r","INSERT INTO t23 \r","\tVALUES(1, 'jack', 'mid', 1);\r","SELECT * FROM t23;\r","```\r","\r","### 商店售货系统表设计案例\r","\r","![](https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/image-20230511231908815.png)\r","\r","```sql\r","-- 使用约束的课堂练习\r","\r","CREATE DATABASE shop_db;\r","\r","-- 现有一个商店的数据库shop_db，记录客户及其购物情况，由下面三个表组成：\r","-- 商品goods（商品号goods_id，商品名goods_name，单价unitprice，商品类别category，供应商provider);\r","-- 客户customer（客户号customer_id,姓名name,住址address,电邮email性别sex,身份证card_Id);\r","-- 购买purchase（购买订单号order_id，客户号customer_id,商品号goods_id,购买数量nums);\r","-- 1 建表，在定义中要求声明 [进行合理设计]：\r","-- (1)每个表的主外键；\r","-- (2)客户的姓名不能为空值；\r","-- (3)电邮不能够重复;\r","-- (4)客户的性别[男|女] check 枚举..\r","-- (5)单价unitprice 在 1.0 - 9999.99 之间 check\r","\r","-- 商品goods\r","CREATE TABLE goods (\r","\tgoods_id INT PRIMARY KEY,\r","\tgoods_name VARCHAR(64) NOT NULL DEFAULT '',\r","\tunitprice DECIMAL(10,2) NOT NULL DEFAULT 0 \r","\t\tCHECK (unitprice \u003e= 1.0 AND unitprice \u003c= 9999.99),\r","\tcategory INT NOT NULL DEFAULT 0,\r","\tprovider VARCHAR(64) NOT NULL DEFAULT '');\r","\t\r","-- 客户customer（客户号customer_id,姓名name,住址address,电邮email性别sex,\r","-- 身份证card_Id);\r","CREATE TABLE customer(\r","\tcustomer_id CHAR(8) PRIMARY KEY, -- 程序员自己决定\r","\t`name` VARCHAR(64) NOT NULL DEFAULT '',\r","\taddress VARCHAR(64) NOT NULL DEFAULT '',\r","\temail VARCHAR(64) UNIQUE NOT NULL,\r","\tsex ENUM('男','女') NOT NULL ,  -- 这里老师使用的枚举类型, 是生效\r","\tcard_Id CHAR(18)); \r","\t\r","-- 购买purchase（购买订单号order_id，客户号customer_id,商品号goods_id,\r","-- 购买数量nums);\r","CREATE TABLE purchase(\r","\torder_id INT UNSIGNED PRIMARY KEY,\r","\tcustomer_id CHAR(8) NOT NULL DEFAULT '', -- 外键约束在后\r","\tgoods_id INT NOT NULL DEFAULT 0 , -- 外键约束在后\r","\tnums INT NOT NULL DEFAULT 0,\r","\tFOREIGN KEY (customer_id) REFERENCES customer(customer_id),\r","\tFOREIGN KEY (goods_id) REFERENCES goods(goods_id));\r","DESC goods;\r","DESC customer;\r","DESC purchase;\r","```\r","\r","## 自增长\r","\r","### 自增长基本介绍\r","\r","在某张表中，存在一个id列(整数),我们希望在添加记录的时候.该列从1开始,自动的增长，怎么处理? \r","\r","![](https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/image-20230512150332955.png)\r","\r","### 自增长使用细节\r","\r","1. 一般来说自增长是和primary key配合使用的\r","2. 自增长也可以单独使用[但是需要配合一个unique]\r","3. 自增长修饰的字段为整数型的(虽然小数也可以但是非常非常少这样使用)\r","4. 自增长默认从1开始，你也可以通过如下命令修改`alter table 表名auto_increment = 新的开始值;`\r","5. 如果你添加数据时，给自增长字段(列)指定的有值，则以指定的值为准,**如果指定了自增长，一般来说，就按照自增长的规则（从指定的值开始，再自增长）**来添加数据\r","\r","```sql\r","-- 演示自增长的使用\r","-- 创建表\r","CREATE TABLE t24\r","\t(id INT PRIMARY KEY AUTO_INCREMENT,\r","\t email VARCHAR(32)NOT NULL DEFAULT '',\r","\t `name` VARCHAR(32)NOT NULL DEFAULT ''); \r","DESC t24\r","-- 测试自增长的使用\r","INSERT INTO t24\r","\tVALUES(NULL, 'tom@qq.com', 'tom'); -- 没有给值，自动维护，id自增长\r","\r","INSERT INTO t24\r","\t(email, `name`) VALUES('hsp@sohu.com', 'hsp');\r","\r","SELECT * FROM t24;\r","\r","-- 修改默认的自增长开始值\r","ALTER TABLE t25 AUTO_INCREMENT = 100\r","CREATE TABLE t25\r","\t(id INT PRIMARY KEY AUTO_INCREMENT,\r","\t email VARCHAR(32)NOT NULL DEFAULT '',\r","\t `name` VARCHAR(32)NOT NULL DEFAULT ''); \r","INSERT INTO t25\r","\tVALUES(NULL, 'mary@qq.com', 'mary');\r","INSERT INTO t25\r","\tVALUES(666, 'hsp@qq.com', 'hsp');\r","SELECT * FROM t25;\r","\r","CREATE DATABASE tmp;\r","CREATE TABLE dept( /*部门表*/\r","deptno MEDIUMINT   UNSIGNED  NOT NULL  DEFAULT 0,\r","dname VARCHAR(20)  NOT NULL  DEFAULT \"\",\r","loc VARCHAR(13) NOT NULL DEFAULT \"\"\r",") ;\r","\r","#创建表EMP雇员\r","CREATE TABLE emp\r","(empno  MEDIUMINT UNSIGNED  NOT NULL  DEFAULT 0, /*编号*/\r","ename VARCHAR(20) NOT NULL DEFAULT \"\", /*名字*/\r","job VARCHAR(9) NOT NULL DEFAULT \"\",/*工作*/\r","mgr MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,/*上级编号*/\r","hiredate DATE NOT NULL,/*入职时间*/\r","sal DECIMAL(7,2)  NOT NULL,/*薪水*/\r","comm DECIMAL(7,2) NOT NULL,/*红利*/\r","deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0 /*部门编号*/\r",") ;\r","\r","#工资级别表\r","CREATE TABLE salgrade\r","(\r","grade MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,\r","losal DECIMAL(17,2)  NOT NULL,\r","hisal DECIMAL(17,2)  NOT NULL\r",");\r","\r","#测试数据\r","INSERT INTO salgrade VALUES (1,700,1200);\r","INSERT INTO salgrade VALUES (2,1201,1400);\r","INSERT INTO salgrade VALUES (3,1401,2000);\r","INSERT INTO salgrade VALUES (4,2001,3000);\r","INSERT INTO salgrade VALUES (5,3001,9999);\t\r","```\r","\r","## mysql 索引\r","\r","### 索引快速入门\r","\r","提高数据库性能，索引是最物美价廉的东西了。不用加**内存**，不用改程序，不用调sql，查询速度就可能提高百倍干倍。\r","\r","```sql\r","CREATE INDEX ename_index ON emp (ename) -- 在 ename 上创建索引\r","```\r","\r","```sql\r","-- 创建测试数据库 tmp\r","CREATE DATABASE tmp;\r","\r","CREATE TABLE dept( /*部门表*/\r","deptno MEDIUMINT   UNSIGNED  NOT NULL  DEFAULT 0,\r","dname VARCHAR(20)  NOT NULL  DEFAULT \"\",\r","loc VARCHAR(13) NOT NULL DEFAULT \"\"\r",") ;\r","\r","#创建表EMP雇员\r","CREATE TABLE emp\r","(empno  MEDIUMINT UNSIGNED  NOT NULL  DEFAULT 0, /*编号*/\r","ename VARCHAR(20) NOT NULL DEFAULT \"\", /*名字*/\r","job VARCHAR(9) NOT NULL DEFAULT \"\",/*工作*/\r","mgr MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,/*上级编号*/\r","hiredate DATE NOT NULL,/*入职时间*/\r","sal DECIMAL(7,2)  NOT NULL,/*薪水*/\r","comm DECIMAL(7,2) NOT NULL,/*红利*/\r","deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0 /*部门编号*/\r",") ;\r","\r","#工资级别表\r","CREATE TABLE salgrade\r","(\r","grade MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,\r","losal DECIMAL(17,2)  NOT NULL,\r","hisal DECIMAL(17,2)  NOT NULL\r",");\r","\r","#测试数据\r","INSERT INTO salgrade VALUES (1,700,1200);\r","INSERT INTO salgrade VALUES (2,1201,1400);\r","INSERT INTO salgrade VALUES (3,1401,2000);\r","INSERT INTO salgrade VALUES (4,2001,3000);\r","INSERT INTO salgrade VALUES (5,3001,9999);\r","\r","DELIMITER $$\r","\r","#创建一个函数，名字 rand_string，可以随机返回我指定的个数字符串\r","CREATE FUNCTION rand_string(n INT)\r","RETURNS VARCHAR(255) #该函数会返回一个字符串\r","BEGIN\r","#定义了一个变量 chars_str， 类型  varchar(100)\r","#默认给 chars_str 初始值   'abcdefghijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ'\r"," DECLARE chars_str VARCHAR(100) DEFAULT\r","   'abcdefghijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ'; \r"," DECLARE return_str VARCHAR(255) DEFAULT '';\r"," DECLARE i INT DEFAULT 0; \r"," WHILE i \u003c n DO\r","    # concat 函数 : 连接函数mysql函数\r","   SET return_str =CONCAT(return_str,SUBSTRING(chars_str,FLOOR(1+RAND()*52),1));\r","   SET i = i + 1;\r","   END WHILE;\r","  RETURN return_str;\r","  END $$\r","\r","\r"," #这里我们又自定了一个函数,返回一个随机的部门号\r","CREATE FUNCTION rand_num( )\r","RETURNS INT(5)\r","BEGIN\r","DECLARE i INT DEFAULT 0;\r","SET i = FLOOR(10+RAND()*500);\r","RETURN i;\r","END $$\r","\r"," #创建一个存储过程， 可以添加雇员\r","CREATE PROCEDURE insert_emp(IN START INT(10),IN max_num INT(10))\r","BEGIN\r","DECLARE i INT DEFAULT 0;\r","#set autocommit =0 把autocommit设置成0\r"," #autocommit = 0 含义: 不要自动提交\r"," SET autocommit = 0; #默认不提交sql语句\r"," REPEAT\r"," SET i = i + 1;\r"," #通过前面写的函数随机产生字符串和部门编号，然后加入到emp表\r"," INSERT INTO emp VALUES ((START+i) ,rand_string(6),'SALESMAN',0001,CURDATE(),2000,400,rand_num());\r","  UNTIL i = max_num\r"," END REPEAT;\r"," #commit整体提交所有sql语句，提高效率\r","   COMMIT;\r"," END $$\r","\r"," #添加8000000数据\r","CALL insert_emp(100001,8000000)$$\r","\r","#命令结束符，再重新设置为;\r","DELIMITER ;\r","\r","SELECT COUNT(*) FROM emp;\r","\r","-- 在没有创建索引时，我们的查询一条记录\r","SELECT * \r","\tFROM emp \r","\tWHERE empno = 1234567 \r","-- 使用索引来优化一下， 体验索引的牛\r","\r","-- 在没有创建索引前 , emp.ibd 文件大小 是 524m\r","-- 创建索引后 emp.ibd 文件大小 是 655m [索引本身也会占用空间.]\r","-- 创建ename列索引,emp.ibd 文件大小 是 827m\r","\r","-- empno_index 索引名称 \r","-- ON emp (empno) : 表示在 emp表的 empno列创建索引\r","CREATE INDEX empno_index ON emp (empno)\r","\r","-- 创建索引后， 查询的速度如何\r","\r","SELECT * \r","\tFROM emp \r","\tWHERE empno = 1234578 -- 0.003s 原来是4.5s\r","\r","\r","-- 创建索引后，只对创建了索引的列有效 \r","SELECT * \r","\tFROM emp \r","\tWHERE ename = 'PjDlwy' -- 没有在ename创建索引时，时间4.7s\r","\r","CREATE INDEX ename_index ON emp (ename) -- 在ename上创建索引\r","```\r","\r","### 索引的原理\r","\r","没有索引为什么会慢?因为全表扫描.\r","\r","使用索引为什么会快?形成一个索引的数据结构，比如二叉树索引（有代价 如下）\r","\r","+ 磁盘占用\r","+ 对dml(update delete insert)语句的效率影响 删除或者插入将会对数据结构造成影响，可能会重构。\r","\r","### 索引的类\r","\r","1. 主键索引，主键自动的为主索引 (类型Primary key)\r","2. 唯一索引(UNIQUE)\r","3. 普通索引(INDEX)\r","4. 全文索引(FULLTEXT)[适用于MyISAM]\r","\r","一般开发，不使用mysql自带的全文索引,，而是使用: 全文搜索的框架：Solr 和 ElasticSearch ( ES )\r","\r","```sql\r","create table t1(\r","id int primary key, -- 主键，同时也是索引，称为主键索引.\r","    name varchar(32));\r","create table t2(\r","id int unique, -- id是唯一的，同时也是索引，称为unique索引.\r","```\r","\r","### 索引使用\r","\r","1.添加索引( 建小表测试id , name ) \r","\r","```sql\r","create [UNIQUE] index index_name on tbl_name (col_ name [(length)][ASC | DESC],......);\r","alter table table_name ADD INDEX [index_namel (index_col_name,..)\r","```\r","\r","2.添加主键(索引) \r","\r","```sql\r","ALTER TABLE 表名 ADD PRIMARY KEY(列名...);\r","```\r","\r","3.删除索引\r","\r","```sql\r","DROP INDEX index_name ON tbl_name,\r","alter table table_name drop index index_name;\r","```\r","\r","4.删除主键索引比较特别: \r","\r","```sql\r","alter table t_b drop primary key;\r","```\r","\r","5.查询索引(三种方式)\r","\r","```sql\r","show index(es) from table_name;\r","show keys from table_name;\r","desc table_Name;\r","```\r","\r","```sql\r","-- 演示mysql的索引的使用\r","-- 创建索引\r","CREATE TABLE t25 (\r","\tid INT ,\r","\t`name` VARCHAR(32));\r","\t\r","-- 查询表是否有索引\r","SHOW INDEXES FROM t25;\r","-- 添加索引\r","-- 添加唯一索引 \r","CREATE UNIQUE INDEX id_index ON t25 (id);\r","-- 添加普通索引方式1\r","CREATE INDEX id_index ON t25 (id);\r","-- 如何选择 \r","-- 1. 如果某列的值，是不会重复的，则优先考虑使用unique索引, 否则使用普通索引\r","-- 添加普通索引方式2\r","ALTER TABLE t25 ADD INDEX id_index (id)\r","\r","-- 添加主键索引\r","CREATE TABLE t26 (\r","\tid INT ,\r","\t`name` VARCHAR(32));\r","ALTER TABLE t26 ADD PRIMARY KEY (id)\r","\r","SHOW INDEX FROM t25\r","\r","-- 删除索引\r","DROP INDEX id_index ON t25\r","-- 删除主键索引\r","ALTER TABLE t26 DROP PRIMARY KEY\r","\r","\r","-- 修改索引 ，先删除，在添加新的索引\r","\r","-- 查询索引\r","-- 1. 方式\r","SHOW INDEX FROM t25\r","-- 2. 方式\r","SHOW INDEXES FROM t25\r","-- 3. 方式\r","SHOW KEYS FROM t25\r","-- 4 方式\r","DESC t25\r","```\r","\r","### 哪些列上适合使用索引\r","\r","1. 较频繁的作为查询条件字段应该创建索引\r","\r","   ```sql\r","   select * from emp where empno = 1\r","   ```\r","\r","2. 唯一性太差的字段不适合单独创建索引，即使频繁作为查询条件\r","\r","   ```sql\r","   select * from emp where sex =‘男‘\r","   ```\r","\r","3. 更新非常频繁的字段不适合创建索引\r","\r","   ```sql\r","   select* from emp where logincount = 1\r","   ```\r","\r","4. 不会出现在WHERE子句中字段不该创建索引\r","\r","## mysql 事务\r","\r","### 什么是事务\r","\r","事务用于保证数据的一致性,它由一组相关的dml（数据操作语言 增删改）语句组成,该组的dml语句要么全部成功，要么全部失败。如: 转账就要用事务来处理,用以保证数据的一致性。\r","\r","示意图：\r","\r","![](https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/image-20230512160929009.png)\r","\r","```sql\r","-- 事务的一个重要的概念和具体操作\r","-- 演示\r","-- 1. 创建一张测试表\r","CREATE TABLE t27\r","\t( id INT,\r","\t  `name` VARCHAR(32));\r","-- 2. 开始事务\r","START TRANSACTION \r","-- 3. 设置保存点\r","SAVEPOINT a\r","-- 执行dml 操作\r","INSERT INTO t27 VALUES(100, 'tom');\r","SELECT * FROM t27;\r","\r","SAVEPOINT b\r","-- 执行dml操作\r","INSERT INTO t27 VALUES(200, 'jack');\r","\r","-- 回退到 b\r","ROLLBACK TO b\r","-- 继续回退 a\r","ROLLBACK TO a\r","-- 如果这样, 表示直接回退到事务开始的状态.\r","ROLLBACK \r","COMMIT\r","```\r","\r","### 事务和锁\r","\r","当执行事务操作时(dml语句), mysql会在表上加锁, 防止其它用户改表的数据，这对用户来讲是非常重要的。\r","\r","mysql数据厍控制台事务的几个重要操作\r","\r","1. `start transaction` --开始一个事务\r","2. `savepoint` 保存点名--设置保存点\r","3. `rollback to` 保存点名--回退事务\r","4. `rollback` --回退全部事务\r","5. `commit` -- 提交事务,所有的操作生效,不能回退\r","\r","### 回退事务\r","\r","在介绍回退事务前，先介绍一下保存点(savepoint)，保存点是事务中的点，用于取消部分事务，当结束事务时(commit)，会自动的删除该事务所定义的所有保存点当执行回退事务时，通过指定保存点可以回退到指定的点。\r","\r","### 提交事务\r","\r","使用commit语句可以提交事务.当执行了commit语句子后,会确认事务的变化、结束事务、删除保存点、释放锁，数据生效。当使用commit语句结束事务后,其它会话[**其他连接**]将可以查着到事务变化后的新数据[所有数据就正式生效.]\r","\r","### 事务细节讨论\r","\r","1. 如果不开始事务，默认情况下，dml操作是自动提交的，不能回滚。\r","2. 如果开始一个事务，你没有创建保存点.你可以执行 rollback,默认就是回退到你事务开始的状态。\r","3. 你也可以在这个事务中(还没有提交时),创建多个保存点.比如: savepoint\r","   aaa;执行dml , savepoint bbb;\r","4. 你可以在事务没有提交前,选择回退到哪个保存点。\r","5. mysql的事务机制需要**innodb的存储引擎才可以使用，myisam不好使**。\r","6. 开始一个事务start transaction 或者可以写 set autocommit=off;\r","\r","```sql\r","-- 讨论 事务细节\r","-- 1. 如果不开始事务，默认情况下，dml操作是自动提交的，不能回滚\r","INSERT INTO t27 VALUES(300, 'milan'); -- 自动提交 commit\r","\r","SELECT * FROM t27\r","\r","-- 2. 如果开始一个事务，你没有创建保存点. 你可以执行 rollback，\r","-- 默认就是回退到你事务开始的状态\r","START TRANSACTION \r","INSERT INTO t27 VALUES(400, 'king');\r","INSERT INTO t27 VALUES(500, 'scott');\r","ROLLBACK -- 表示直接回退到事务开始的的状态\r","COMMIT;\r","\r","-- 3. 你也可以在这个事务中(还没有提交时), 创建多个保存点.比如: savepoint \taaa;    \r","-- 执行 dml , savepoint  bbb\r","\r","-- 4. 你可以在事务没有提交前，选择回退到哪个保存点\r","-- 5. InnoDB 存储引擎支持事务 , MyISAM 不支持\r","-- 6. 开始一个事务 start  transaction 或者可以写 set autocommit=off;\r","```\r","\r","## mysql 事务隔离级别\r","\r","### 事务隔离级别介绍\r","\r","1. 多个连接开启各自事务操作数据库中数据时，数据库系统要负责隔离操作，以保证各个连接在获取数据时的准确性。(通俗解释：每一个事务看到同一张表的数据不一样)\r","\r","2. 如果不考虑隔离性,可能会引发如下问题:\r","\r","+ 脏读\r","+ 不可重复读\r","+ 幻读\r","\r","### 查看事务隔离级别\r","\r","+ 脏读(dirty read):当一个事务读取另一个事务尚未提交的改变(update,insert,delete)时,产生脏读。（未commit）\r","+ 不可重复读(nonrepeatable read):同一查询在同一事务中多次进行，由于其他提交事务所做的修改或删除,每次返回不同的结果集，此时发生不可重复读。（已commit）\r","+ 幻读(phantom read):同一查询在同一事务中多次进行，由于其他提交事务所做的插入操作，每次返回不同的结果集，此时发生幻读。（已commit）\r","\r","### 事务隔离级别\r","\r","概念: Mysql隔离级别定义了事务与事务之间的隔离程度。\r","\r","**加锁**会在其他线程操作数据库时，不操作数据库，自己卡住，等待其他线程commit后才进入数据库。\r","\r","![](https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/image-20230512162256512.png)\r","\r","### mysql 的事务隔离级--案例\r","\r","![](https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/image-20230512162506968.png)\r","\r","```sql\r","-- 演示mysql的事务隔离级别\r","\r","-- 1. 开了两个mysql的控制台\r","-- 2. 查看当前mysql的隔离级别\r","SELECT @@tx_isolation;\r","\r","-- mysql\u003e SELECT @@tx_isolation;\r","-- +-----------------+\r","-- | @@tx_isolation  |\r","-- +-----------------+\r","-- | REPEATABLE-READ |\r","-- +-----------------+\r","\r","-- 3.把其中一个控制台的隔离级别设置 Read uncommitted\r","\r","SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED\r","\r","-- 4. 创建表\r","CREATE TABLE `account`(\r","\tid INT,\r","\t`name` VARCHAR(32),\r","\tmoney INT);\r","\t\r","\r","-- 查看当前会话隔离级别 \r","SELECT @@tx_isolation\r","-- 查看系统当前隔离级别\r","SELECT @@global.tx_isolation\r","-- 设置当前会话隔离级别\r","SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED\r","-- 设置系统当前隔离级别\r","SET GLOBAL TRANSACTION ISOLATION LEVEL [你设置的级别]\r","```\r","\r","### 设置事务隔离级别\r","\r","1. 查看当前会话隔离级别\r","\r","   ```sql\r","   select @@tx_isolation;\r","   ```\r","\r","2. 查看系统当前隔离级别\r","\r","   ```sql\r","   select @@global.tx_isolation;\r","   ```\r","\r","3. 设置当前会话隔离级别\r","\r","   ```sql\r","   set session transaction isolation level repeatable read;\r","   ```\r","\r","4. 设置系统当前隔离级别\r","\r","   ```sql\r","   set global transaction isolation level repeatable read;\r","   ```\r","\r","5. mysql默认的事务隔离级别是 `repeatable read`，一般情况下，没有特殊\r","   要求,没有必要修改(因为该级别可以满足绝大部分项目需求)\r","\r","如果想要修改默认隔离级别，可以全局修改，修改`my.ini`配置文件，在最后加上\r","\r","```ini\r","#可选参数有:READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ,SERIALIZABLE.\r","[mysqld]\r","transaction-isolation = REPEATABLE-READ\r","```\r","\r","## mysql 事务ACID\r","\r","### 事务的acid 特性\r","\r","1. 原子性(Atomicity)\r","   原子性是指事务是一个不可分割的工作单位，事务中的操作要么都发生，要么都不发生。\r","2. 一致性(Consistency)\r","   事务必须使数据库从一个二致性状态变换到另外一个一致性状态\r","3. 隔离性(lsolation)\r","   事务的隔离性是多个用户并发访问数据库时，数据库为每一个用户开启的事务，不能被其他事务的操作数据所干扰，多个并发事务之间要相互隔离。\r","4. 持久性(Durability)\r","   持久性是指一个事务一旦被提交，它对数据库中数据的改变就是永久性的，接下来即使数据库发生故障也不应该对其有任何影响。\r","\r","## mysql 表类型和存储引擎\r","\r","### 基本介绍\r","\r","1. **MySQL的表类型由存储引擎(Storage Engines）决定**，主要包括MylSAM、innoDB、Memory等。\r","\r","2. MySQL 数据表主要支持六种类型，分别是: CSV.Memory、ARCHIVE.\r","MRG MYISAM、MYISAM、InnoBDB。\r","3. 这六种又分为两类\r","  + 一类是”事务安全型”(transaction-safe) 支持事务，比如: InnoDB;\r","  + 其余都属于第二类，称为”非事务安全型”(non-transaction-safe) 不支持事务 [mysiam和memory].\r","\r","![](https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/image-20230512164743675.png)\r","\r","### 主要的存储引擎/表类型特点\r","\r","![](https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/image-20230512164827538.png)\r","\r","### 细节说明\r","\r","重点介绍三种: MyISAM、InnoDB、MEMORY\r","\r","1. MylSAM不支持事务、也不支持外键，但其访问速度快，对事务完整性没有要求\r","1. InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是比起\r","MylSAM存储引擎，InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。\r","3. MEMORY存储引擎使用存在内存中的内容来创建表。每个MEMORY表只实际对应\r","个磁盘文件。MEMORY类型的表访问非常得快，因为它的数据是放在内存中的，并且默认使用HASH索引。但是**一旦MySQL服务关闭，表中的数据就会丢失掉**, 表的结构还在。\r","\r","### 三种存储引擎表使用案例\r","\r","```sql\r","-- 表类型和存储引擎\r","\r","-- 查看所有的存储引擎\r","SHOW ENGINES\r","-- innodb 存储引擎，是前面使用过.\r","-- 1. 支持事务 2. 支持外键 3. 支持行级锁\r","\r","-- myisam 存储引擎\r","CREATE TABLE t28 (\r","\tid INT,\r","\t`name` VARCHAR(32)) ENGINE MYISAM\r","-- 1. 添加速度快 2. 不支持外键和事务 3. 支持表级锁\r","\r","START TRANSACTION;\r","SAVEPOINT t1\r","INSERT INTO t28 VALUES(1, 'jack');\r","SELECT * FROM t28;\r","ROLLBACK TO t1\r","\r","-- memory 存储引擎\r","-- 1. 数据存储在内存中[关闭了Mysql服务，数据丢失, 但是表结构还在] \r","-- 2. 执行速度很快(没有IO读写) 3. 默认支持索引(hash表)\r","\r","CREATE TABLE t29 (\r","\tid INT,\r","\t`name` VARCHAR(32)) ENGINE MEMORY\r","DESC t29 -- 表结构还在\r","INSERT INTO t29\r","\tVALUES(1,'tom'), (2,'jack'), (3, 'hsp');\r","SELECT * FROM t29\r","\r","-- 指令修改存储引擎\r","ALTER TABLE `t29` ENGINE = INNODB\r","```\r","\r","### 如何选择表的存储引擎\r","\r","1. 如果你的应用不需要事务，处理的只是基本的CRUD操作，那么MylSAM\r","   是不二选择,速度快\r","2. 如果需要支持事务,选择lnnoDB。\r","\r","3. Memory存储引擎就是将数据存储在内存中，由于没有磁盘I/O的等待, 速度极快。但由于是内存存储引擎，所做的任何修改在服务器重启后都将消失。(经典用法用户的在线状态()\r","\r","![](https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/image-20230512165749727.png)\r","\r","### 修改存储引擎\r","\r","```sql\r","ALTER TABLE `表名` ENGINE = 储存引擎;\r","```\r","\r","## 视图(view)\r","\r","### 看一个需求\r","\r","emp表的列信息很多，有些信息是个人重要信息(比如sal, comm,mgr, hiredate)，如果我们希望某个用户只能查询emp表的(empno,ename, job和deptno)信息，有什么办法?=\u003e视图\r","\r","### 基本概念\r","\r","1. 视图是一个虚拟表，其内容由查询定义。同真实的表一样，视图包含列，其数据来自**对应的真实表(基表)**\r","\r","2. 视图和基表关系的示意图：\r","\r","   ![](https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/image-20230512194118735.png)\r","\r","### 视图的基本使用\r","\r","1. create view 视图名 as select语句\r","2. alter view 视图名 as select语句 --更新成新的视图\r","2. SHOW CREATE VIEW 视图名\r","4. drop view 视图名1,视图名2\r","\r","```sql\r","-- 视图的使用\r","-- 创建一个视图emp_view01，只能查询emp表的(empno、ename, job 和 deptno ) 信息\r","\r","-- 创建视图\r","CREATE VIEW emp_view01\r","\tAS\r","\tSELECT empno, ename, job, deptno FROM emp; \r","\r","-- 查看视图\r","DESC emp_view01\r","\r","SELECT * FROM emp_view01;\r","SELECT empno, job  FROM emp_view01;\r","\r","-- 查看创建视图的指令\r","SHOW CREATE VIEW emp_view01\r","-- 删除视图\r","DROP VIEW emp_view01;\r","\r","\r","-- 视图的细节\r","\r","-- 1. 创建视图后，到数据库去看，对应视图只有一个视图结构文件(形式: 视图名.frm) \r","-- 2. 视图的数据变化会影响到基表，基表的数据变化也会影响到视图[insert update delete ]\r","\r","-- 修改视图 会影响到基表\r","\r","UPDATE emp_view01 \r","\tSET job = 'MANAGER' \r","\tWHERE empno = 7369\r","\t\r","SELECT * FROM emp; -- 查询基表\r","\r","\r","SELECT * FROM emp_view01\r","\r","-- 修改基本表， 会影响到视图\r","\r","UPDATE emp \r","\tSET job = 'SALESMAN' \r","\tWHERE empno = 7369\r","\r","-- 3. 视图中可以再使用视图 , 比如从emp_view01 视图中，选出empno,和ename做出新视图\r","DESC emp_view01\r","\r","CREATE VIEW emp_view02\r","\tAS\r","\tSELECT empno, ename FROM emp_view01\r","\t\r","SELECT * FROM emp_view02\r","```\r","\r","### 视图细节讨论\r","\r","1. 创建视图后，到数据库去看，对应视图只有一个视图结构文件(形式:视图名.frm)\r","2. 视图的数据变化会影响到基表，基表的数据变化也会影响到视图[insert update delete ]\r","3. 视图中可以再使用视图，数据仍然来自基表.\r","\r","### 视图最佳实践\r","\r","1. 安全。一些数据表有着重要的信息。有些字段是保密的，不能让用户直接看到。这时就可以创建一个视图，在这张视图中只保留一部分字段。这样，用户就可以查询自己需要的字段,不能查看保密的字段。\r","2. 性能。关系数据库的数据常常会分表存储，使用外键建立这些表的之间关系。这时,数据库查询通常会用到连接(**JOIN**)。这样做不但麻烦，效率相对也比较低。如果建立一个视图，将相关的表和字段组合在一起，就可以避免使用**JOIN**查询数据。\r","3. 灵活。如果系统中有一张旧的表，这张表由于设计的问题，即将被废弃。然而，很多应用都是基于这张表，不易修改。这时就可以建立一张视图，视图中的数据直接映射到**新建**的表。这样，就可以少做很多改动，也达到了升级数据表的目的。\r","\r","### 视图课堂练习\r","\r","```sql\r","-- 视图的课堂练习\r","-- 针对 emp，dept , 和 salgrade 张三表.创建一个视图 emp_view03，\r","-- 可以显示雇员编号，雇员名，雇员部门名称和 薪水级别[即使用三张表，构建一个视图]\r","/*\r","\t分析: 使用三表联合查询，得到结果\r","\t将得到的结果，构建成视图\r","*/\r","CREATE VIEW emp_view03\r","\tAS\r","\tSELECT empno, ename, dname, grade\r","\tFROM emp, dept, salgrade\r","\tWHERE emp.deptno = dept.deptno AND \r","\t(sal BETWEEN losal AND hisal) \r","\r","DESC emp_view03\r","SELECT * FROM emp_view03\r","```\r","\r","## Mysql 管理\r","\r","### Mysql 用户\r","\r","mysql中的用户，都存储在系数据库`mysql`中`user`表中\r","\r","![](https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/image-20230512200635976.png)\r","\r","其中user表的重要字段说明:\r","1. host: 允许登录的“位置”，localhost表示该用户只允许本机登录，也可以指定ip地址，比如:192.168.1.100\r","2. user:用户名;\r","3. authentication string:密码，是通过mysql的password()函数加密之后\r","的密码。\r","\r","### 创建用户\r","\r","```sql\r","create user '用户名'@'允许登录位置' identified by '密码'\r","```\r","\r","说明:创建用户，同时指定密码\r","\r","### 删除用户\r","\r","```sql\r","drop user '用户名'@'允许登录位置';\r","```\r","\r","### 用户修改密码\r","\r","修改自己的密码:\r","\r","```sql\r","set password = password('密码');\r","```\r","\r","修改他人的密码(需要有修改用户密码权限):\r","\r","```sql\r","set password for '用户名'@'登录位置'=password('密码');\r","```\r","\r","### mysql 中的权限\r","\r","![](https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/image-20230512200614120.png)\r","\r","### 给用户授权\r","\r","基本语法:\r","\r","```sql\r","grant 权限列表 on 库.对象名 to '用户名'@'登录位置'【identified  by '密码'】\r","```\r","\r","说明:\r","\r","1. 权限列表，多个权限用逗号分开\r","\r","   grant select on .....\r","\r","   grant select,delete,create on ......\r","\r","   grant all [privileges] on .... //表示赋予该用户在该对象上的所有权限\r","\r","2. 特别说明\r","   `*.*`:代表本系统中的所有数据库的所有对象(表，视图，存储过程)\r","\r","   `库.*`:表示某个数据库中的所有数据对象(表，视图，存储过程等)\r","\r","3. identified by可以省略，也可以写出.\r","\r","   (1)如果用户存在，就是同时修改该用户的密码。\r","\r","   (2)如果该用户不存在，就是创建该用户!\r","\r","### 回收用户授权\r","\r","基本语法:\r","\r","```sql\r","revoke 权限列表 on 库.对象名 from '用户名'@'登录位置';\r","```\r","\r","### 权限生效指令\r","\r","如果权限没有生效，可以执行下面命令，基本语法:\r","\r","```sql\r","FLUSH PRIVILEGES;\r","```\r","\r","```sql\r","-- Mysql用户的管理\r","-- 原因：当我们做项目开发时，可以根据不同的开发人员，赋给他相应的Mysql操作权限\r","-- 所以，Mysql数据库管理人员(root), 根据需要创建不同的用户，赋给相应的权限，供人员使用\r","\r","-- 1. 创建新的用户\r","-- 解读 (1) 'hsp_edu'@'localhost' 表示用户的完整信息 'hsp_edu' 用户名 'localhost' 登录的IP\r","-- (2) 123456 密码, 但是注意 存放到 mysql.user表时，是password('123456') 加密后的密码\r","--     *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9\r","CREATE USER 'hsp_edu'@'localhost' IDENTIFIED BY '123456'\r","\r","SELECT `host`, `user`, authentication_string  \r","\tFROM mysql.user\r","\r","-- 2. 删除用户\r","DROP USER 'hsp_edu'@'localhost'\r","\r","-- 3. 登录\r","\r","-- root 用户修改 hsp_edu@localhost 密码, 是可以成功.\r","SET PASSWORD FOR 'hsp_edu'@'localhost' = PASSWORD('123456')\r","```\r","\r","### 课堂练习题\r","\r","用户管理练习题\r","\r","1. 创建一个用户(你的名字，拼音)，密码123，并且只可以从本地登录，不让远程登录mysql\r","2. 创建库和表testdb下的news表,要求:使用root用户创建\r","3. 给用户分配查看news表和添加数据的权限\r","4. 测试看看用户是否只有这几个权限\r","5. 修改密码为abc ,要求:使用root用户完成\r","6. 重新登录\r","7. 使用root 用户删除你的用户\r","\r","```sql\r","-- 演示 用户权限的管理\r","\r","-- 创建用户 shunping  密码 123 , 从本地登录\r","CREATE USER 'shunping'@'localhost' IDENTIFIED BY '123'\r","\r","-- 使用root 用户创建 testdb  ,表 news\r","CREATE DATABASE testdb\r","CREATE TABLE news (\r","\tid INT ,\r","\tcontent VARCHAR(32));\r","-- 添加一条测试数据\r","INSERT INTO news VALUES(100, '北京新闻');\r","SELECT * FROM news;\r","\r","-- 给 shunping 分配查看 news 表和 添加news的权限\r","GRANT SELECT , INSERT \r","\tON testdb.news\r","\tTO 'shunping'@'localhost'\r","\t\r","-- 可以增加update权限\r","GRANT UPDATE  \r","\tON testdb.news\r","\tTO 'shunping'@'localhost'\r","\t\r","\t\r","-- 修改 shunping的密码为 abc\r","SET PASSWORD FOR 'shunping'@'localhost' = PASSWORD('abc');\r","\r","-- 回收 shunping 用户在 testdb.news 表的所有权限\r","REVOKE SELECT , UPDATE, INSERT ON testdb.news FROM 'shunping'@'localhost'\r","REVOKE ALL ON testdb.news FROM 'shunping'@'localhost'\r","\r","-- 删除 shunping\r","DROP USER 'shunping'@'localhost'\r","```\r","\r","### 细节说明\r","\r","1. 在创建用户的时候，如果不指定Host,则为%，**%表示表示所有IP都有连接权限**\r","\r","   ```\r","   create user XX;\r","   ```\r","\r","2. 你也可以这样指定\r","   `create user 'xxx'@'192.168.1.%' `表示xx用户在 `192.168.1.*` 的ip可以登录mysql\r","\r","3. 在删除用户的时候，如果 host 不是%, 需要明确指定‘用户'@'host值'\r","\r","```sql\r","-- 说明 用户管理的细节\r","-- 在创建用户的时候，如果不指定Host, 则为% , %表示表示所有IP都有连接权限 \r","-- create user  xxx;\r","\r","CREATE USER jack\r","\r","SELECT `host`, `user` FROM mysql.user\r","\r","-- 你也可以这样指定 \r","-- create user  'xxx'@'192.168.1.%'  表示 xxx用户在 192.168.1.*的ip可以登录mysql\r","\r","CREATE USER 'smith'@'192.168.1.%'\r","\r","-- 在删除用户的时候，如果 host 不是 %, 需要明确指定  '用户'@'host值'\r","\r","DROP USER jack -- 默认就是 DROP USER 'jack'@'%'\r","\r","DROP USER 'smith'@'192.168.1.%'\r","```\r","\r","## 本章作业\r","\r","1.选择题\r","\r","(1).以下哪条语句是错误的?[D]\r","\r","```sql\r","A.SELECT empno,ename name,sal salary FROM emp;\r","B.SELECT empno,ename name,sal AS salary FROM emp;\r","C.SELECT ename,sal*12 AS \"Annual Salary\" FROM emp;\r","D.SELECT ename,sal*12 Annual Salary FROM emp; -- 有空格最好引起来\r","```\r","\r","(2).某用户希望显示补助非空的所有雇员信息，应该使用哪条语句?[B]\r","\r","```sql\r","A.SELECT ename.sal,comm FROM emp WHERE comm\u003c\u003enull;\r","B.SELECT ename,sal,comm FROM emp WHERE comm IS NOT null;\r","C.SELECT ename,sal,comm FROM emp WHERE comm\u003c\u003e0;\r","```\r","\r","(3).以下哪条语句是错误的?[C]\r","\r","```sql\r","A.SELECT ename,sal salary FROM emp ORDER BY sal;\r","B.SELECT ename,sal salary FROM emp ORDER BY salary；\r","C. SELECT ename,sal salary FROM emp ORDER BY 3;\r","```\r","\r","2.写础查看DEPT表和EMP表的结构的sql语句\r","\r","```sql\r","-- 2. 写出 查看DEPT表和EMP表的结构 的sql语句\r","-- \r","\tDESC dept\r","\tDESC emp\r","```\r","\r","3.使用简单查询语句完成:\r","\r","(1)显示所有部门名称。\r","\r","(2)显示所有雇员名及其全年收入13月(工资+补助),并指定列别名\"年收入”\r","\r","```sql\r","-- 3. 使用简单查询语句完成:\r","-- (1) 显示所有部门名称。\r","SELECT dname \r","\tFROM dept;\r","-- (2) 显示所有雇员名及其全年收入 13月(工资+补助),并指定列别名\"年收入\"\r","SELECT ename, (sal + IFNULL(comm,0)) * 13 AS \"年收入\"\r","\tFROM emp \r","SELECT * FROM emp;\r","```\r","\r","4.限制查询数据。\r","(1)显示工资超过2850的雇员姓名和工资。\r","\r","(2)显示工资不在1500到2850之间的所有雇员名及工资。\r","\r","(3)显示编号为7566的雇员姓名及所在部门编号。\r","\r","(4)显示部门10和30中工资超过1500的雇员名及工资。\r","\r","(5)显示无管理者的雇员名及岗位。\r","\r","```sql\r","-- 4.限制查询数据。\r","-- (1) 显示工资超过2850的雇员姓名和工资。\r","SELECT ename, sal\r","\tFROM emp \r","\tWHERE sal \u003e 2850\r","-- (2) 显示工资不在1500到2850之间的所有雇员名及工资。\r","SELECT ename, sal\r","\tFROM emp \r","\tWHERE sal \u003c 1500 OR sal \u003e 2850\r","\t\r","SELECT ename, sal\r","\tFROM emp \r","\tWHERE NOT (sal \u003e= 1500 AND sal \u003c= 2850)\r","-- (3) 显示编号为7566的雇员姓名及所在部门编号。\r","SELECT ename, deptno\r","\tFROM emp \r","\tWHERE empno = 7566\r","-- (4) 显示部门10和30中工资超过1500的雇员名及工资。\r","SELECT ename, job\r","\tFROM emp \r","\tWHERE (deptno = 10 OR deptno = 30) AND sal \u003e 1500\r","-- (5) 显示无管理者的雇员名及岗位。\r","SELECT ename, job \r","\tFROM emp\r","\tWHERE mgr IS NULL;\r","```\r","\r","5.排序数据。\r","\r","1)显示在1991年2月1日到1991年5月1日之间雇用的雇员名,岗位及雇佣日期,并以雇佣日期进行排序[默认]。\r","\r","2)显示获得补助的所有雇员名,工资及补助,并以工资降序排序\r","\r","```sql\r","-- 5.排序数据。\r","-- (1) 显示在1991年2月1日到1991年5月1日之间雇用的雇员名,岗位及雇佣日期, \r","-- 并以雇佣日期进行排序[默认]。\r","-- 思路 1. 先查询到对应结果 2. 考虑排序\r","SELECT ename, job, hiredate\r","\tFROM emp\r","\tWHERE hiredate \u003e= '1991-02-01' AND hiredate \u003c= '1991-05-01'\r","\tORDER BY hiredate\r","\r","-- (2) 显示获得补助的所有雇员名,工资及补助,并以工资降序排序\r","SELECT ename, sal, comm\r","\tFROM emp\r","\tORDER BY sal DESC\r","```\r","\r","6.根据:emp员工表写出正确SQL\r","\r","--1.选择部门30中的所有员工.\r","\r","--2.列出所有办事员(CLERK)的姓名，编号和部门编号\r","\r","--3.找出佣金高于薪金的员工.\r","\r","--4.找出佣金高于薪金60%的员工.\r","\r","--5.找出部门10中所有经理(MANAGER)和部门20中所有办事员(CLERK)的详细资料.\r","\r","--6.找出部门10中所有经理(MANAGER),部门20中所有办事员(CLERK),还有既不是经理又不是办事员但其薪金大于或等于2000的所有员工的详细资料.\r","\r","--7.找出收取佣金的员工的不同工作.\r","\r","--8.找出不收取佣金或收取的佣金低于100的员工.--9.找出各月倒数第3天受雇的所有员工.\r","\r","--10.找出早于12年前受雇的员工.\r","\r","--11.以首字母小写的方式显示所有员工的姓名.\r","\r","--12.显示正好为5个字符的员工的姓名.\r","\r","--13.显示不带有\"R\"的员工的姓名.\r","\r","--14.显示所有员工姓名的前三个字符.\r","\r","--15.显示所有员工的姓名,用a替换所有\"A\"\r","\r","--16.显示满10年服务年限的员工的姓名和受雇日期.\r","\r","--17.显示员工的详细资料,按姓名排序.\r","\r","--18.显示员工的姓名和受雇日期,根据其服务年限,将最老的员工排在最前面.\r","\r","--19.显示所有员工的姓名、工作和薪金,按工作降序排序,若工作相同则按薪金排序.\r","\r","--20.显示所有员工的姓名、加入公司的年份和月份,按受雇日期所在月排序,若月份相同则将最早年份的员工排在最前面.\r","\r","--21.显示在一个月为30天的情况所有员工的日薪金,忽略余数.\r","\r","--22.找出在(任何年份的)2月受聘的所有员工。\r","\r","--23.对于每个员工,显示其加入公司的天数.\r","\r","--24.显示姓名字段的任何位置包含\"A\"的所有员工的姓名.\r","\r","--25.以年月日的方式显示所有员工的服务年限.(大概)\r","\r","```sql\r","-- homework03\r","\r","-- ------1.选择部门30中的所有员工.\r","SELECT * FROM \r","\temp\r","\tWHERE deptno = 30\r","-- ------2.列出所有办事员(CLERK)的姓名，编号和部门编号. \r","SELECT ename, empno, deptno, job FROM \r","\temp\r","\tWHERE job = 'CLERK'\r","-- ------3.找出佣金高于薪金的员工.\r","SELECT * FROM \r","\temp\r","\tWHERE IFNULL(comm, 0) \u003e sal\r","-- ------4.找出佣金高于薪金60%的员工.\r","SELECT * FROM \r","\temp\r","\tWHERE IFNULL(comm, 0) \u003e sal * 0.6\r","-- ------5.找出部门10中所有经理(MANAGER)和部门20中所有办事员(CLERK)的详细资料.\r","-- \r","SELECT * FROM\r","\temp\r","\tWHERE (deptno = 10 AND job = 'MANAGER') \r","\tOR (deptno = 20 AND job = 'CLERK')\r","-- ------6.找出部门10中所有经理(MANAGER),部门20中所有办事员(CLERK), \r"," -- 还有既不是经理又不是办事员但其薪金大于或等于2000的所有员工的详细资料.\r","SELECT * FROM\r","\temp\r","\tWHERE (deptno = 10 AND job = 'MANAGER') \r","\tOR (deptno = 20 AND job = 'CLERK')\r","\tOR (job != 'MANAGER' AND job != 'CLERK' AND sal \u003e= 2000 )\r","-- ------7.找出收取佣金的员工的不同工作.\r","SELECT DISTINCT job\r","\tFROM emp\r","\tWHERE comm IS NOT NULL\r","\r","-- ------8.找出不收取佣金或收取的佣金低于100的员工.\r","SELECT *\r","\tFROM emp\r","\tWHERE comm IS  NULL OR IFNULL(comm, 0) \u003c 100\r","-- ------9.找出各月倒数第3天受雇的所有员工.\r","-- 提示: last_day(日期)， 可以返回该日期所在月份的最后一天\r","-- last_day(日期) - 2 得到日期所有月份的倒数第3天\r","SELECT * \r","\tFROM emp\r","\tWHERE LAST_DAY(hiredate) - 2  =  hiredate\r","\r","-- ------10.找出早于12年前受雇的员工.（即 入职时间超过12年）\r","SELECT * \r","\tFROM emp\r","\tWHERE DATE_ADD(hiredate, INTERVAL 12 YEAR) \u003c NOW() \r","\r","-- \r","-- ------11.以首字母小写的方式显示所有员工的姓名.\r","SELECT CONCAT(LCASE(SUBSTRING(ename,1,1)), SUBSTRING(ename,2))\r","\tFROM emp;\r","-- ------12.显示正好为5个字符的员工的姓名.\r","\r","SELECT * \r","\tFROM emp\r","\tWHERE LENGTH(ename) = 5\r","\r","-- ------13.显示不带有\"R\"的员工的姓名.\r","SELECT * \r","\tFROM emp\r","\tWHERE ename NOT LIKE '%R%'\r","-- ------14.显示所有员工姓名的前三个字符.\r","SELECT LEFT(ename,3)\r","\tFROM emp\r","-- ------15.显示所有员工的姓名,用a替换所有\"A\"\r","SELECT REPLACE(ename, 'A', 'a') \r","\tFROM emp\r","-- ------16.显示满10年服务年限的员工的姓名和受雇日期.\r","SELECT ename, hiredate\r","\tFROM emp\r","\tWHERE DATE_ADD(hiredate, INTERVAL 10 YEAR) \u003c= NOW()\r","-- ------17.显示员工的详细资料,按姓名排序.\r","\r","-- ------18.显示员工的姓名和受雇日期,根据其服务年限,将最老的员工排在最前面.\r","-- \r","SELECT ename, hiredate\r","\tFROM emp\r","\tORDER BY hiredate \r","-- ------19.显示所有员工的姓名、工作和薪金,按工作降序排序,若工作相同则按薪金排序.\r","SELECT ename, job, sal\r","\tFROM emp\r","\tORDER BY job DESC, sal \r","-- ------20.显示所有员工的姓名、加入公司的年份和月份,按受雇日期所在月排序,\r","-- 若月份相同则将最早年份的员工排在最前面.\r","SELECT ename, CONCAT(YEAR(hiredate),'-', MONTH(hiredate))\r","\tFROM emp\r","\tORDER BY MONTH(hiredate), YEAR(hiredate)\r","\r","-- ------21.显示在一个月为30天的情况所有员工的日薪金,忽略余数.\r","SELECT ename, FLOOR(sal / 30), sal / 30 \r","\tFROM emp; \r","-- ------22.找出在(任何年份的)2月受聘的所有员工。\r","SELECT * \r","\tFROM emp\r","\tWHERE MONTH(hiredate) = 2\r","-- ------23.对于每个员工,显示其加入公司的天数.\r","-- \r","SELECT ename, DATEDIFF(NOW(), hiredate) \r","\tFROM emp\r","-- ------24.显示姓名字段的任何位置包含\"A\"的所有员工的姓名.\r","SELECT *\r","\tFROM emp\r","\tWHERE ename LIKE '%A%'\r","-- ------25.以年月日的方式显示所有员工的服务年限.   (大概)\r","\r","-- 思路 1. 先求出 工作了多少天 \r","SELECT ename, FLOOR(DATEDIFF(NOW(), hiredate) / 365) AS \" 工作年 \", \r","\tFLOOR((DATEDIFF(NOW(), hiredate) % 365) / 31) AS \" 工作月 \",\r","\tDATEDIFF(NOW(), hiredate) % 31 AS \" 工作天\"\r","\tFROM emp;\r","```\r","\r","7.根据:emp员工表，dept部门表，工资=薪金sal＋佣金comm 写出正确SQL\r","\r","(1)列出至少有一个员工的所有部门\r","\r","(2)列出薪金比“SMITH”多的所有员工。\r","\r","(3)列出受雇日期晚于其直接上级的所有员工。\r","\r","(4)列出部门名称和这些部门的员工信息，同时列出那些没有员工的部门\r","\r","(5)列出所有“CLERK”(办事员)的姓名及其部门名称。\r","\r","(6)列出最低薪金大于1500的各种工作。\r","\r","(7)列出在部门“SALES”(销售部)工作的员工的姓名。\r","\r","(8)列出薪金高于公司平均薪金的所有员工。\r","\r","(9)列出与“SCOTT”从事相同工作的所有员工。\r","\r","(10)列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金\r","\r","(11)列出在每个部门工作的员工数量、平均工资和平均服务期限。\r","\r","(12)列出所有员工的姓名、部门名称和工资。\r","\r","(13)列出所有部门的详细信息和部门人数。\r","\r","(14)列出各种工作的最低工资。\r","\r","(15)列出MANAGER(经理)的最低薪金。\r","\r","(16)列出所有员工的年工资,按年薪从低到高排序。\r","\r","```sql\r","-- \r","-- (1)．列出至少有一个员工的所有部门\r","\r","/*\r","\t先查出各个部门有多少人\r","\t使用 having 子句过滤\r","*/\r","SELECT COUNT(*) AS c, deptno\r","\tFROM emp \r","\tGROUP BY deptno \r","\tHAVING c \u003e 1\r","-- (2)．列出薪金比“SMITH”多的所有员工。\r","/*\r","\t先查出 smith 的 sal =\u003e 作为子查询\r","\t然后其他员工 sal 大于 smith 即可\r","*/\r","SELECT * \r","\tFROM emp\r","\tWHERE sal \u003e (\r","\t\tSELECT sal \r","\t\t\tFROM emp \r","\t\t\tWHERE ename = 'SMITH'\r","\t)\r","-- (3)．列出受雇日期晚于其直接上级的所有员工。\r","/*\r","\t先把 emp 表 当做两张表 worker , leader\r","\t条件 1. worker.hiredate \u003e leader.hiredate\r","\t     2. worker.mgr = leader.empno\r","*/\r","\r","SELECT worker.ename AS '员工名', worker.hiredate AS '员工入职时间',\r","\tleader.ename  AS '上级名', leader.hiredate AS '上级入职时间' \r","\tFROM emp worker , emp leader\r","\tWHERE worker.hiredate \u003e leader.hiredate \r","\tAND worker.mgr = leader.empno;\r","\r","-- (4)．列出部门名称和这些部门的员工信息，同时列出那些没有员工的部门。\r","\r","/*\r","\t这里因为需要显示所有部门，因此考虑使用外连接，(左外连接)\r","\t如果没有印象了，去看看老师讲的外连接.\r","*/\r","SELECT dname, emp.*\r","\tFROM dept \r","\tLEFT JOIN emp ON dept.deptno = emp.deptno \r","\r","-- (5)．列出所有“CLERK”（办事员）的姓名及其部门名称。\r","\r","SELECT ename, dname , job\r","\tFROM emp, dept\r","\tWHERE job = 'CLERK' AND emp.deptno = dept.deptno\r","\r","-- (6)．列出最低薪金大于1500的各种工作。\r","\r","/*\r","\t查询各个部门的最低工资\r","\t使用having 子句进行过滤\r","*/\r","SELECT MIN(sal) AS min_sal , job\r","\tFROM emp\r","\tGROUP BY job\r","\tHAVING min_sal \u003e 1500\r","-- (7)．列出在部门“SALES”（销售部）工作的员工的姓名。\r","\r","SELECT ename, dname\r","\tFROM emp , dept\r","\tWHERE emp.deptno = dept.deptno AND dname = 'SALES'\r","\r","-- (8)．列出薪金高于公司平均薪金的所有员工。\r","\r","SELECT *\r","\tFROM emp\r","\tWHERE sal \u003e (\r","\t\tSELECT AVG(sal) \r","\t\t\tFROM emp\r","\t)\r","\r","-- (9)．列出与“SCOTT”从事相同工作的所有员工。\r","\r","SELECT * \r","\tFROM emp\r","\tWHERE job = (\r","\t\tSELECT job \r","\t\t\tFROM emp\r","\t\t\tWHERE ename = 'SCOTT'\r","\t) AND ename != 'SCOTT'\r","\r","-- (10)．列出薪金高于所在部门30的工作的所有员工的薪金的员工姓名和薪金。\r","\r","\r","-- 先查询出30部门的最高工资\r","SELECT ename, sal \r","\tFROM emp \r","\tWHERE sal \u003e (\r","\t\tSELECT MAX(sal) \r","\t\t\tFROM emp\r","\t\t\tWHERE deptno = 30\r","\t) \r","-- (11)．列出在每个部门工作的员工数量、平均工资和平均服务期限(时间单位)。\r","-- 老师建议 ， 写sql 也是一步一步完成的\r","SELECT COUNT(*) AS \"部门员工数量\", deptno , AVG(sal) AS \"部门平均工资\" , \r","\tFORMAT(AVG(DATEDIFF(NOW(), hiredate) / 365 ),2) AS \" 平均服务期限(年)\"\r","\tFROM emp \r","\tGROUP BY deptno\r","\r","-- (12)．列出所有员工的姓名、部门名称和工资。\r","\r","-- 就是 emp 和 dept 联合查询 ，连接条件就是 emp.deptno = dept.deptno\r","\r","-- (13)．列出所有部门的详细信息和部门人数。\r","\r","-- 1. 先得到各个部门人数 , 把下面的结果看成临时表 和 dept表联合查询\r","SELECT COUNT(*) AS c , deptno \r","\tFROM emp\r","\tGROUP BY deptno\r","\r","-- 2. \r","SELECT dept.*, tmp.c AS \"部门人数\"\r","\tFROM dept, (\r","\t\tSELECT COUNT(*) AS c , deptno \r","\t\tFROM emp\r","\t\tGROUP BY deptno\r","\t) tmp \r","\tWHERE dept.deptno = tmp.deptno\r","\r","-- (14)．列出各种工作的最低工资。\r","\r","SELECT MIN(sal), job\r","\tFROM emp\r","\tGROUP BY job\r","-- (15)．列出MANAGER（经理）的最低薪金。\r","\r","SELECT MIN(sal), job\r","\tFROM emp\r","\tWHERE job = 'MANAGER'\r","-- (16)．列出所有员工的年工资,按年薪从低到高排序。\r","\r","-- 1. 先得到员工的年工资\r","SELECT ename, (sal + IFNULL(comm, 0)) * 12 year_sal\r","\tFROM emp\r","\tORDER BY year_sal \r","```\r","\r","8.设学校环境如下:一个系有若干个专业，每个专业一年只招一个班，每个班有若干个学生.现要建立关于系、学生、班级的数据库，关系模式为:\r","\r","+ 班CLASS (班号classid，专业名subject，系名deptname，入学年份enrolltime，人数num)\r","+ 学生STUDENT(学号studentid，姓名name，年龄age，班号classid)\r","+ 系DEPARTMENT (系号departmentid，系名deptname)\r","\r","![](https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/image-20230512204037587.png)\r","\r","![](https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/image-20230512204047760.png)\r","\r","试用SQL语言完成以下功能:\r","\r","(1)建表，在定义中要求声明:\r","\t(1)每个表的主外码。\r","\r","​\t(2) deptname是唯一约束。\r","\r","​\t(3)学生姓名不能为空。\r","\r","(2)插入如下数据\r","\r","DEPARTMENT (001，数学; 002，计算机; 003,化学;004,中文;005，经济;)\r","\r","(3)完成以下查询功能\r","\r","​\t3.1找出所有姓李的学生。\r","\r","​\t3.2列出所有开设超过1个专业的系的名字\r","\r","​\t3.3列出人数大于等于30的系的编号和名字。\r","\r","(4)学校又新增加了一个物理系,编号为006\r","\r","(5)学生张三退学，请更新相关的表\r","\r","```sql\r","-- 完成最后一个综合的练习\r","\r","-- 8. 设学校环境如下:一个系有若干个专业，每个专业一年只招一个班，每个班有若干个学生。\r","-- 现要建立关于系、学生、班级的数据库，关系模式为：\r","-- 班CLASS （班号classid，专业名subject，系名deptname，入学年份enrolltime，人数num）\r","-- 学生STUDENT （学号studentid，姓名name，年龄age，班号classid）\r","-- 系 DEPARTMENT （系号departmentid，系名deptname）\r","-- 试用SQL语言完成以下功能：  homework05.sql 10min \r","-- \r","-- (1) 建表，在定义中要求声明：\r","--     （1）每个表的主外码。\r","--     （2）deptname是唯一约束。\r","--     （3）学生姓名不能为空。\r","\r","-- 创建表 系 DEPARTMENT （系号departmentid，系名deptname）\r","CREATE TABLE DEPARTMENT (\r","\tdepartmentid VARCHAR(32) PRIMARY KEY,\r","\tdeptname VARCHAR(32) UNIQUE NOT NULL);\r","\t\r","-- 班CLASS （班号classid，专业名subject，系名deptname，入学年份enrolltime，人数num）\r","CREATE TABLE `class` (\r","\tclassid INT PRIMARY KEY,\r","\t`subject` VARCHAR(32) NOT NULL DEFAULT '',\r","\tdeptname VARCHAR(32) , -- 外键字段，在表定义后指定\r","\tenrolltime INT NOT NULL DEFAULT 2000,\r","\tnum INT NOT NULL DEFAULT 0,\r","\tFOREIGN KEY (deptname) REFERENCES  DEPARTMENT(deptname));\r","\t\r","-- 学生STUDENT （学号studentid，姓名name，年龄age，班号classid）\r","CREATE TABLE hsp_student (\r","\tstudentid INT PRIMARY KEY,\r","\t`name` VARCHAR(32) NOT NULL DEFAULT '',\r","\tage INT NOT NULL DEFAULT 0,\r","\tclassid INT, -- 外键\r","\tFOREIGN KEY (classid) REFERENCES  `class`(classid));\r","\t\r","-- 添加测试数据\r","\r","INSERT INTO department VALUES('001','数学');\r","INSERT INTO department VALUES('002','计算机');\r","INSERT INTO department VALUES('003','化学');\r","INSERT INTO department VALUES('004','中文');\r","INSERT INTO department VALUES('005','经济');\r","\r","INSERT INTO class VALUES(101,'软件','计算机',1995,20);\r","INSERT INTO class VALUES(102,'微电子','计算机',1996,30);\r","INSERT INTO class VALUES(111,'无机化学','化学',1995,29);\r","INSERT INTO class VALUES(112,'高分子化学','化学',1996,25);\r","INSERT INTO class VALUES(121,'统计数学','数学',1995,20);\r","INSERT INTO class VALUES(131,'现代语言','中文',1996,20);\r","INSERT INTO class VALUES(141,'国际贸易','经济',1997,30);\r","INSERT INTO class VALUES(142,'国际金融','经济',1996,14);\r","\r","INSERT INTO hsp_student VALUES(8101,'张三',18,101);\r","INSERT INTO hsp_student VALUES(8102,'钱四',16,121);\r","INSERT INTO hsp_student VALUES(8103,'王玲',17,131);\r","INSERT INTO hsp_student VALUES(8105,'李飞',19,102);\r","INSERT INTO hsp_student VALUES(8109,'赵四',18,141);\r","INSERT INTO hsp_student VALUES(8110,'李可',20,142);\r","INSERT INTO hsp_student VALUES(8201,'张飞',18,111);\r","INSERT INTO hsp_student VALUES(8302,'周瑜',16,112);\r","INSERT INTO hsp_student VALUES(8203,'王亮',17,111);\r","INSERT INTO hsp_student VALUES(8305,'董庆',19,102);\r","INSERT INTO hsp_student VALUES(8409,'赵龙',18,101);\r","\r","SELECT * FROM department\r","SELECT * FROM class\r","SELECT * FROM hsp_student\r","\r","-- (3) 完成以下查询功能\r","--   3.1 找出所有姓李的学生。\r","-- 查表 hsp_student , like\r","SELECT * \r","\tFROM hsp_student\r","\tWHERE `name` LIKE '李%' \r","--   3.2 列出所有开设超过1个专业的系的名字。\r","\r","-- 1. 先查询各个系有多少个专业\r","SELECT COUNT(*) AS nums, deptname \r","\tFROM class\r","\tGROUP BY deptname HAVING nums \u003e 1\r","--   3.3 列出人数大于等于30的系的编号和名字。\r","-- 1. 先查出各个系有多少人, 并得到 \u003e= 30 的系\r","\r","SELECT SUM(num) AS nums, deptname  \r","\tFROM class \r","\tGROUP BY  deptname \r","\tHAVING nums \u003e= 30\r","\t\r","-- 2. 将上面的结果看成一个临时表 和 department 联合查询即可\r","\r","SELECT  tmp.*, department.departmentid\r","\tFROM department , (\r","\t\tSELECT SUM(num) AS nums, deptname  \r","\t\tFROM class \r","\t\tGROUP BY  deptname \r","\t\tHAVING nums \u003e= 30\r","\t) tmp \r","\tWHERE department.deptname = tmp.deptname;\r","\t\r","\r","\r","-- (4) 学校又新增加了一个物理系，编号为006\r","-- 添加一条数据\r","INSERT INTO department VALUES('006','物理系');\r","-- (5) 学生张三退学，请更新相关的表\r","\r","-- 分析：1. 张三所在班级的人数-1 2. 将张三从学生表删除  3. 需要使用事务控制\r","\r","-- 开启事务\r","START TRANSACTION;\r","-- 张三所在班级的人数-1 \r","UPDATE class SET num = num - 1\r","\tWHERE classid = (\r","\t\tSELECT classid \r","\t\t\tFROM hsp_student \r","\t\t\tWHERE NAME = '张三'\r","\t);\r","\r","DELETE \r","\tFROM hsp_student\r","\tWHERE NAME = '张三';\r","\t\r","-- 提交事务\r","COMMIT;\r","\r","SELECT * FROM hsp_student;\r","SELECT * FROM class\r","```\r","\r"],"stylingDirectives":[[[0,1,"pl-v"],[2,3,"pl-s"],[17,18,"pl-s"],[18,19,"pl-s"],[19,34,"pl-corl"],[34,35,"pl-s"]],[[1,16,"pl-c1"]],[[1,20,"pl-c1"]],[[1,39,"pl-c1"]],[[1,45,"pl-c1"]],[[1,19,"pl-c1"]],[[1,22,"pl-c1"]],[[1,32,"pl-c1"]],[[1,24,"pl-c1"]],[[1,18,"pl-c1"]],[[1,23,"pl-c1"]],[[1,22,"pl-c1"]],[[1,26,"pl-c1"]],[[1,14,"pl-c1"]],[[1,40,"pl-c1"]],[[1,31,"pl-c1"]],[[1,29,"pl-c1"]],[[1,29,"pl-c1"]],[[1,31,"pl-c1"]],[[1,25,"pl-c1"]],[[1,23,"pl-c1"]],[[1,27,"pl-c1"]],[[1,18,"pl-c1"]],[[1,24,"pl-c1"]],[[1,24,"pl-c1"]],[[1,78,"pl-c1"]],[[1,26,"pl-c1"]],[[1,46,"pl-c1"]],[[1,17,"pl-c1"]],[[1,26,"pl-c1"]],[[1,45,"pl-c1"]],[[1,17,"pl-c1"]],[[1,17,"pl-c1"]],[[1,26,"pl-c1"]],[[1,43,"pl-c1"]],[[1,19,"pl-c1"]],[[1,26,"pl-c1"]],[[1,17,"pl-c1"]],[[1,35,"pl-c1"]],[[1,13,"pl-c1"]],[[1,37,"pl-c1"]],[[1,47,"pl-c1"]],[[1,15,"pl-c1"]],[[1,45,"pl-c1"]],[[1,42,"pl-c1"]],[[1,47,"pl-c1"]],[[1,21,"pl-c1"]],[[1,19,"pl-c1"]],[[1,15,"pl-c1"]],[[1,15,"pl-c1"]],[[1,22,"pl-c1"]],[[1,47,"pl-c1"]],[[1,53,"pl-c1"]],[[1,22,"pl-c1"]],[[1,20,"pl-c1"]],[[1,24,"pl-c1"]],[[1,22,"pl-c1"]],[[1,20,"pl-c1"]],[[1,34,"pl-c1"]],[[1,13,"pl-c1"]],[[1,17,"pl-c1"]],[[1,31,"pl-c1"]],[[1,23,"pl-c1"]],[[1,28,"pl-c1"]],[[1,21,"pl-c1"]],[[1,15,"pl-c1"]],[[1,28,"pl-c1"]],[[1,21,"pl-c1"]],[[1,19,"pl-c1"]],[[1,19,"pl-c1"]],[[1,29,"pl-c1"]],[[1,43,"pl-c1"]],[[1,43,"pl-c1"]],[[1,19,"pl-c1"]],[[1,37,"pl-c1"]],[[1,14,"pl-c1"]],[[1,31,"pl-c1"]],[[1,16,"pl-c1"]],[[1,15,"pl-c1"]],[[1,28,"pl-c1"]],[[1,15,"pl-c1"]],[[1,24,"pl-c1"]],[[1,17,"pl-c1"]],[[1,37,"pl-c1"]],[[1,31,"pl-c1"]],[[1,27,"pl-c1"]],[[1,37,"pl-c1"]],[[1,19,"pl-c1"]],[[1,31,"pl-c1"]],[[1,14,"pl-c1"]],[[1,23,"pl-c1"]],[[1,23,"pl-c1"]],[[1,24,"pl-c1"]],[[1,21,"pl-c1"]],[[1,19,"pl-c1"]],[[1,17,"pl-c1"]],[[1,17,"pl-c1"]],[[1,29,"pl-c1"]],[[1,24,"pl-c1"]],[[1,19,"pl-c1"]],[[1,17,"pl-c1"]],[[1,17,"pl-c1"]],[[1,17,"pl-c1"]],[[1,21,"pl-c1"]],[[1,32,"pl-c1"]],[[1,25,"pl-c1"]],[[1,25,"pl-c1"]],[[1,21,"pl-c1"]],[[1,41,"pl-c1"]],[[1,25,"pl-c1"]],[[1,32,"pl-c1"]],[[1,29,"pl-c1"]],[[1,36,"pl-c1"]],[[1,19,"pl-c1"]],[[1,34,"pl-c1"]],[[1,19,"pl-c1"]],[[1,31,"pl-c1"]],[[1,29,"pl-c1"]],[[1,21,"pl-c1"]],[[1,22,"pl-c1"]],[[1,19,"pl-c1"]],[[1,17,"pl-c1"]],[[1,23,"pl-c1"]],[[1,21,"pl-c1"]],[[1,21,"pl-c1"]],[[1,21,"pl-c1"]],[[1,24,"pl-c1"]],[[1,25,"pl-c1"]],[[1,17,"pl-c1"]],[[1,17,"pl-c1"]],[[1,21,"pl-c1"]],[[1,29,"pl-c1"]],[[1,19,"pl-c1"]],[[1,21,"pl-c1"]],[[1,21,"pl-c1"]],[[1,19,"pl-c1"]],[[1,19,"pl-c1"]],[[1,16,"pl-c1"]],[],[],[[0,16,"pl-mh"],[2,16,"pl-en"]],[],[[0,7,"pl-mh"],[3,7,"pl-en"]],[],[[0,10,"pl-mh"],[4,10,"pl-en"]],[],[],[],[],[],[[0,19,"pl-mh"],[4,19,"pl-en"]],[],[],[],[[0,22,"pl-mh"],[4,22,"pl-en"]],[],[[0,1,"pl-s"],[1,2,"pl-v"]],[],[[0,1,"pl-s"],[1,2,"pl-v"]],[],[[3,4,"pl-s"],[4,21,"pl-c1"],[21,22,"pl-s"]],[],[[3,4,"pl-s"],[4,22,"pl-c1"],[22,23,"pl-s"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,2,"pl-s"],[2,3,"pl-s"],[3,4,"pl-s"],[4,100,"pl-corl"],[100,101,"pl-s"]],[],[[0,1,"pl-v"]],[],[],[],[[0,1,"pl-v"]],[],[[0,10,"pl-mh"],[3,10,"pl-en"]],[],[[0,1,"pl-s"],[1,2,"pl-v"]],[[0,1,"pl-s"],[1,2,"pl-v"]],[[0,1,"pl-s"],[1,2,"pl-v"]],[],[[0,2,"pl-s"],[2,3,"pl-s"],[3,4,"pl-s"],[4,100,"pl-corl"],[100,101,"pl-s"]],[],[[0,15,"pl-mh"],[3,15,"pl-en"]],[],[[0,2,"pl-s"],[2,3,"pl-s"],[3,4,"pl-s"],[4,100,"pl-corl"],[100,101,"pl-s"]],[],[[0,11,"pl-mh"],[3,11,"pl-en"]],[],[[10,11,"pl-s"],[23,24,"pl-s"]],[],[[10,11,"pl-s"],[38,39,"pl-s"]],[],[[10,11,"pl-s"],[18,19,"pl-s"]],[],[[10,11,"pl-s"],[38,39,"pl-s"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,2,"pl-s"],[2,3,"pl-s"],[3,4,"pl-s"],[4,100,"pl-corl"],[100,101,"pl-s"]],[],[[0,1,"pl-s"],[1,2,"pl-v"]],[[0,1,"pl-s"],[1,2,"pl-v"],[36,37,"pl-s"],[42,43,"pl-s"]],[[15,16,"pl-s"],[22,23,"pl-s"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,10,"pl-c"],[0,1,"pl-c"]],[[0,28,"pl-c"],[0,1,"pl-c"]],[],[[0,10,"pl-c"],[0,1,"pl-c"]],[[0,6,"pl-k"],[7,15,"pl-k"],[16,20,"pl-en"]],[[0,8,"pl-c"],[0,1,"pl-c"]],[[0,4,"pl-k"],[5,13,"pl-k"]],[[0,26,"pl-c"],[0,1,"pl-c"]],[[0,6,"pl-k"],[7,15,"pl-k"],[16,20,"pl-en"],[31,34,"pl-k"]],[[0,33,"pl-c"],[0,1,"pl-c"]],[[0,6,"pl-k"],[7,15,"pl-k"],[16,20,"pl-en"],[31,34,"pl-k"]],[[0,44,"pl-c"],[0,1,"pl-c"]],[],[[0,43,"pl-c"],[0,1,"pl-c"]],[[0,34,"pl-c"],[0,1,"pl-c"]],[[0,6,"pl-k"],[7,8,"pl-k"]],[[1,5,"pl-k"]],[[1,6,"pl-k"],[12,13,"pl-k"],[14,19,"pl-s"],[14,15,"pl-pds"],[18,19,"pl-pds"]],[[0,3,"pl-s"]],[],[[0,11,"pl-mh"],[3,11,"pl-en"]],[],[],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[],[[0,3,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[],[[0,3,"pl-s"]],[],[[7,8,"pl-s"],[13,14,"pl-s"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,4,"pl-k"],[5,13,"pl-k"]],[[0,3,"pl-s"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,11,"pl-c"],[0,1,"pl-c"]],[[0,18,"pl-c"],[0,1,"pl-c"]],[],[[0,24,"pl-c"],[0,1,"pl-c"]],[[21,31,"pl-s"],[21,22,"pl-pds"],[30,31,"pl-pds"]],[[0,63,"pl-c"],[0,1,"pl-c"]],[],[[0,19,"pl-c"],[0,1,"pl-c"]],[[0,4,"pl-k"],[5,13,"pl-k"]],[[0,3,"pl-s"]],[],[[0,10,"pl-mh"],[3,10,"pl-en"]],[],[],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[10,11,"pl-k"],[17,18,"pl-k"],[20,21,"pl-k"],[26,27,"pl-c1"],[31,32,"pl-c1"],[38,39,"pl-k"]],[[0,3,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[],[[0,3,"pl-s"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,44,"pl-c"],[0,1,"pl-c"]],[],[[0,40,"pl-c"],[0,1,"pl-c"]],[[0,19,"pl-c"],[0,1,"pl-c"]],[[10,11,"pl-k"],[18,19,"pl-k"],[21,22,"pl-k"],[34,35,"pl-k"],[40,43,"pl-c1"],[44,47,"pl-c1"]],[],[[0,4,"pl-k"],[5,13,"pl-k"]],[],[[0,24,"pl-c"],[0,1,"pl-c"]],[[11,14,"pl-c1"],[15,18,"pl-c1"]],[[0,45,"pl-c"],[0,1,"pl-c"]],[[0,3,"pl-s"]],[],[[0,12,"pl-mh"],[3,12,"pl-en"]],[],[],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[10,11,"pl-k"],[17,18,"pl-k"],[27,28,"pl-c1"],[30,31,"pl-c1"],[35,36,"pl-k"]],[[0,3,"pl-s"]],[],[[0,6,"pl-mh"],[3,6,"pl-en"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,6,"pl-k"],[7,12,"pl-k"],[13,23,"pl-en"]],[],[],[],[],[[11,14,"pl-k"]],[[0,3,"pl-s"]],[],[[0,1,"pl-v"]],[[0,1,"pl-v"]],[[0,1,"pl-v"]],[[0,1,"pl-v"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,6,"pl-c"],[0,1,"pl-c"]],[[0,79,"pl-c"],[0,1,"pl-c"]],[[0,53,"pl-c"],[0,1,"pl-c"]],[[0,11,"pl-c"],[0,1,"pl-c"]],[[0,14,"pl-c"],[0,1,"pl-c"]],[[0,13,"pl-c"],[0,1,"pl-c"]],[[0,6,"pl-k"],[7,12,"pl-k"],[14,18,"pl-en"]],[[4,7,"pl-k"]],[[1,7,"pl-s"],[1,2,"pl-pds"],[6,7,"pl-pds"],[8,15,"pl-k"],[16,19,"pl-c1"]],[[1,11,"pl-s"],[1,2,"pl-pds"],[10,11,"pl-pds"],[12,19,"pl-k"],[20,23,"pl-c1"]],[[1,11,"pl-s"],[1,2,"pl-pds"],[10,11,"pl-pds"],[12,16,"pl-k"]],[[11,14,"pl-k"]],[[0,3,"pl-s"]],[],[[0,20,"pl-mh"],[3,20,"pl-en"]],[],[[0,2,"pl-s"],[2,3,"pl-s"],[3,4,"pl-s"],[4,100,"pl-corl"],[100,101,"pl-s"]],[],[[0,2,"pl-s"],[2,3,"pl-s"],[3,4,"pl-s"],[4,100,"pl-corl"],[100,101,"pl-s"]],[],[[0,2,"pl-s"],[2,3,"pl-s"],[3,4,"pl-s"],[4,100,"pl-corl"],[100,101,"pl-s"]],[],[[0,16,"pl-mh"],[4,16,"pl-en"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,9,"pl-c"],[0,1,"pl-c"]],[[0,45,"pl-c"],[0,1,"pl-c"]],[[0,28,"pl-c"],[0,1,"pl-c"]],[[0,35,"pl-c"],[0,1,"pl-c"]],[[0,39,"pl-c"],[0,1,"pl-c"]],[[0,6,"pl-k"],[7,12,"pl-k"],[13,15,"pl-en"]],[],[[0,6,"pl-k"],[7,12,"pl-k"],[13,15,"pl-en"]],[],[],[[0,11,"pl-k"],[15,21,"pl-k"],[22,25,"pl-c1"],[28,40,"pl-c"],[28,29,"pl-c"]],[[0,6,"pl-k"],[7,8,"pl-k"],[9,13,"pl-k"]],[],[[0,11,"pl-k"],[15,21,"pl-k"],[22,25,"pl-c1"]],[[0,6,"pl-k"],[7,8,"pl-k"],[9,13,"pl-k"]],[[0,3,"pl-s"]],[],[[0,14,"pl-mh"],[4,14,"pl-en"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,6,"pl-k"],[7,12,"pl-k"],[13,16,"pl-en"],[31,33,"pl-k"]],[[0,6,"pl-k"],[7,12,"pl-k"],[13,16,"pl-en"],[39,41,"pl-k"]],[[0,3,"pl-s"]],[],[[0,15,"pl-mh"],[4,15,"pl-en"]],[],[],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[6,7,"pl-k"],[30,33,"pl-k"],[34,35,"pl-c1"]],[[6,7,"pl-k"],[8,19,"pl-k"],[25,26,"pl-c1"],[28,29,"pl-c1"]],[[6,7,"pl-k"],[8,19,"pl-k"],[24,30,"pl-k"],[31,32,"pl-c1"],[34,36,"pl-c1"]],[[0,3,"pl-s"]],[],[],[],[[0,1,"pl-v"]],[[0,1,"pl-v"]],[[0,1,"pl-v"]],[[0,1,"pl-v"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,10,"pl-c"],[0,1,"pl-c"]],[[0,3,"pl-c"],[0,1,"pl-c"]],[[0,19,"pl-c"],[0,1,"pl-c"]],[[0,44,"pl-c"],[0,1,"pl-c"]],[[0,12,"pl-c"],[0,1,"pl-c"]],[[0,18,"pl-c"],[0,1,"pl-c"]],[[0,6,"pl-k"],[7,12,"pl-k"],[13,16,"pl-en"],[22,25,"pl-k"],[26,27,"pl-c1"]],[[0,11,"pl-k"],[16,22,"pl-k"],[23,26,"pl-c1"],[29,58,"pl-c"],[29,30,"pl-c"]],[[0,6,"pl-k"],[7,8,"pl-k"],[9,13,"pl-k"]],[[0,6,"pl-k"],[7,8,"pl-k"],[9,13,"pl-k"],[18,23,"pl-k"],[28,29,"pl-k"],[30,31,"pl-c1"]],[[0,3,"pl-s"]],[],[[0,16,"pl-mh"],[4,16,"pl-en"]],[],[[0,1,"pl-s"],[1,2,"pl-v"],[9,11,"pl-s"],[17,19,"pl-s"],[20,21,"pl-s"],[29,30,"pl-s"]],[],[],[],[[0,1,"pl-s"],[1,2,"pl-v"],[3,5,"pl-s"],[12,14,"pl-s"],[14,15,"pl-s"],[18,19,"pl-s"],[20,21,"pl-s"],[29,30,"pl-s"]],[],[[0,1,"pl-v"]],[[0,1,"pl-v"]],[[0,1,"pl-v"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,27,"pl-c"],[0,1,"pl-c"]],[],[[0,4,"pl-c"],[0,1,"pl-c"]],[[0,6,"pl-k"],[7,12,"pl-k"],[13,16,"pl-en"]],[],[],[[6,13,"pl-k"],[14,16,"pl-c1"],[17,19,"pl-c1"]],[[0,5,"pl-c"],[0,1,"pl-c"]],[[0,11,"pl-k"],[16,22,"pl-k"],[23,25,"pl-c1"],[26,40,"pl-c1"],[42,44,"pl-c1"],[45,59,"pl-c1"],[60,62,"pl-c1"],[63,77,"pl-c1"]],[[0,6,"pl-k"],[7,8,"pl-k"],[9,13,"pl-k"]],[],[[0,16,"pl-c"],[0,1,"pl-c"]],[[0,6,"pl-k"],[7,12,"pl-k"],[13,16,"pl-en"]],[[5,12,"pl-k"],[13,15,"pl-c1"]],[[0,11,"pl-k"],[16,22,"pl-k"],[23,78,"pl-c1"]],[],[[0,6,"pl-k"],[7,8,"pl-k"],[9,13,"pl-k"]],[[0,6,"pl-k"],[7,12,"pl-k"],[13,16,"pl-en"]],[[5,11,"pl-k"]],[[0,11,"pl-k"],[16,22,"pl-k"],[23,78,"pl-c1"]],[[0,6,"pl-k"],[7,8,"pl-k"],[9,13,"pl-k"]],[[0,3,"pl-s"]],[],[[0,12,"pl-mh"],[4,12,"pl-en"]],[],[],[],[[12,14,"pl-s"],[16,18,"pl-s"]],[],[[14,15,"pl-s"]],[],[[14,16,"pl-s"],[18,20,"pl-s"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,22,"pl-c"],[0,1,"pl-c"]],[[0,40,"pl-c"],[0,1,"pl-c"]],[[0,13,"pl-c"],[0,2,"pl-c"]],[[0,20,"pl-c"],[0,2,"pl-c"]],[[0,29,"pl-c"],[0,2,"pl-c"]],[[0,52,"pl-c"],[0,2,"pl-c"]],[[0,58,"pl-c"],[0,2,"pl-c"]],[[0,57,"pl-c"],[0,2,"pl-c"]],[[0,6,"pl-k"],[7,12,"pl-k"],[13,16,"pl-en"]],[[1,7,"pl-s"],[1,2,"pl-pds"],[6,7,"pl-pds"],[8,12,"pl-k"],[13,16,"pl-c1"]],[],[[0,6,"pl-k"],[7,12,"pl-k"],[13,16,"pl-en"]],[[1,7,"pl-s"],[1,2,"pl-pds"],[6,7,"pl-pds"],[8,15,"pl-k"],[16,21,"pl-c1"]],[],[[0,4,"pl-k"],[5,10,"pl-k"]],[[0,3,"pl-s"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[],[],[[0,1,"pl-v"]],[[0,1,"pl-v"]],[[0,1,"pl-v"]],[],[],[],[[0,1,"pl-v"]],[[0,1,"pl-v"],[70,71,"pl-s"],[71,78,"pl-en"],[105,106,"pl-s"],[106,123,"pl-c1"],[123,124,"pl-s"]],[],[],[],[],[],[[0,1,"pl-s"],[1,2,"pl-v"]],[[0,1,"pl-s"],[1,2,"pl-v"]],[],[],[],[],[],[[31,32,"pl-s"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,13,"pl-c"],[0,1,"pl-c"]],[[0,51,"pl-c"],[0,1,"pl-c"]],[[0,6,"pl-k"],[7,12,"pl-k"],[13,16,"pl-en"]],[[1,7,"pl-s"],[1,2,"pl-pds"],[6,7,"pl-pds"],[8,12,"pl-k"],[13,14,"pl-c1"]],[[0,11,"pl-k"],[16,22,"pl-k"],[23,29,"pl-s"],[23,24,"pl-pds"],[28,29,"pl-pds"]],[],[[0,6,"pl-k"],[7,8,"pl-k"],[9,13,"pl-k"]],[],[[0,6,"pl-k"],[7,12,"pl-k"],[13,16,"pl-en"]],[[1,7,"pl-s"],[1,2,"pl-pds"],[6,7,"pl-pds"],[8,15,"pl-k"],[16,17,"pl-c1"]],[[0,11,"pl-k"],[16,22,"pl-k"],[23,29,"pl-s"],[23,24,"pl-pds"],[28,29,"pl-pds"]],[[0,11,"pl-k"],[16,22,"pl-k"],[23,29,"pl-s"],[23,24,"pl-pds"],[28,29,"pl-pds"]],[[0,6,"pl-k"],[7,8,"pl-k"],[9,13,"pl-k"]],[],[[0,44,"pl-c"],[0,1,"pl-c"]],[[0,20,"pl-c"],[0,1,"pl-c"]],[[0,6,"pl-k"],[7,12,"pl-k"],[13,16,"pl-en"],[26,30,"pl-k"]],[[0,11,"pl-k"],[16,22,"pl-k"],[23,30,"pl-s"],[23,24,"pl-pds"],[29,30,"pl-pds"],[32,42,"pl-s"],[32,33,"pl-pds"],[41,42,"pl-pds"],[44,57,"pl-s"],[44,45,"pl-pds"],[56,57,"pl-pds"]],[[0,6,"pl-k"],[7,8,"pl-k"],[9,13,"pl-k"]],[[0,3,"pl-s"]],[],[[0,13,"pl-mh"],[4,13,"pl-en"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,6,"pl-k"],[7,12,"pl-k"],[13,22,"pl-en"],[27,31,"pl-k"]],[[3,12,"pl-k"],[13,21,"pl-k"],[37,46,"pl-k"],[47,49,"pl-k"],[50,56,"pl-k"]],[[8,17,"pl-k"],[21,30,"pl-k"]],[[0,85,"pl-c"],[0,1,"pl-c"]],[[0,3,"pl-s"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[5,6,"pl-k"],[7,18,"pl-k"]],[[0,6,"pl-k"],[7,19,"pl-s"],[7,8,"pl-pds"],[18,19,"pl-pds"],[20,24,"pl-c1"],[24,25,"pl-k"],[25,27,"pl-c1"],[27,28,"pl-k"],[28,30,"pl-c1"],[31,33,"pl-c1"],[34,36,"pl-c1"],[37,39,"pl-c1"],[39,42,"pl-s"],[39,40,"pl-pds"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,9,"pl-s"]],[[0,0,"pl-s"]],[[0,30,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,10,"pl-s"]],[[0,35,"pl-s"]],[[0,18,"pl-s"]],[[0,22,"pl-s"]],[[0,32,"pl-s"]],[[0,22,"pl-s"]],[[0,37,"pl-s"]],[[0,66,"pl-s"]],[[0,2,"pl-s"]],[[0,18,"pl-s"]],[[0,36,"pl-s"]],[[0,9,"pl-s"],[8,9,"pl-pds"],[9,13,"pl-c1"],[13,14,"pl-k"],[14,16,"pl-c1"],[16,17,"pl-k"],[17,19,"pl-c1"],[19,22,"pl-s"],[19,20,"pl-pds"],[21,22,"pl-pds"],[22,26,"pl-c1"],[26,27,"pl-k"],[27,29,"pl-c1"],[29,30,"pl-k"],[30,32,"pl-c1"],[33,35,"pl-c1"],[36,38,"pl-c1"],[39,41,"pl-c1"],[41,44,"pl-s"],[41,42,"pl-pds"]],[[0,45,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,8,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,9,"pl-s"]],[[0,8,"pl-s"]],[[0,8,"pl-s"]],[[0,11,"pl-s"]],[[0,10,"pl-s"]],[[0,21,"pl-s"]],[[0,26,"pl-s"]],[[0,10,"pl-s"]],[[0,13,"pl-s"]],[[0,13,"pl-s"]],[[0,12,"pl-s"]],[[0,20,"pl-s"]],[[0,8,"pl-s"]],[[0,20,"pl-s"]],[[0,14,"pl-s"]],[[0,15,"pl-s"]],[[0,21,"pl-s"]],[[0,17,"pl-s"]],[[0,15,"pl-s"]],[[0,60,"pl-s"]],[[0,7,"pl-s"]],[[0,17,"pl-s"]],[[0,14,"pl-s"],[13,14,"pl-pds"],[17,21,"pl-s"],[17,18,"pl-pds"],[20,21,"pl-pds"],[22,26,"pl-s"],[22,23,"pl-pds"],[25,26,"pl-pds"],[26,30,"pl-c1"],[30,31,"pl-k"],[31,33,"pl-c1"],[33,34,"pl-k"],[34,36,"pl-c1"],[36,39,"pl-s"],[36,37,"pl-pds"]],[[0,3,"pl-s"],[2,3,"pl-pds"],[3,7,"pl-c1"],[7,8,"pl-k"],[8,10,"pl-c1"],[10,11,"pl-k"],[11,13,"pl-c1"],[14,16,"pl-c1"],[17,19,"pl-c1"],[20,22,"pl-c1"],[22,26,"pl-s"],[22,23,"pl-pds"],[25,26,"pl-pds"],[29,39,"pl-s"],[29,30,"pl-pds"],[38,39,"pl-pds"],[46,49,"pl-s"],[46,47,"pl-pds"]],[[0,2,"pl-s"]],[[0,20,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,11,"pl-s"]],[[0,0,"pl-s"]],[[0,101,"pl-s"]],[[0,0,"pl-s"]],[[0,11,"pl-s"]],[[0,0,"pl-s"]],[[0,40,"pl-s"],[18,19,"pl-pds"],[19,20,"pl-pds"],[39,40,"pl-pds"],[41,45,"pl-s"],[41,42,"pl-pds"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,9,"pl-s"]],[[0,46,"pl-s"]],[[0,16,"pl-s"]],[[0,43,"pl-s"],[40,41,"pl-pds"],[41,42,"pl-pds"]],[[0,13,"pl-s"]],[[0,32,"pl-s"]],[[0,19,"pl-s"]],[[0,15,"pl-s"]],[[0,43,"pl-s"],[41,42,"pl-pds"],[42,43,"pl-pds"]],[[0,11,"pl-s"]],[[0,15,"pl-s"]],[[0,9,"pl-s"]],[[0,17,"pl-s"]],[[0,28,"pl-s"]],[[0,17,"pl-s"]],[[0,39,"pl-s"]],[[0,23,"pl-s"]],[[0,21,"pl-s"]],[[0,58,"pl-s"],[56,57,"pl-pds"],[57,58,"pl-pds"]],[[0,13,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,42,"pl-s"]],[[0,0,"pl-s"]],[[0,18,"pl-s"]],[[0,18,"pl-s"]],[[0,18,"pl-s"]],[[0,18,"pl-s"]],[[0,0,"pl-s"]],[[0,12,"pl-s"]],[[0,0,"pl-s"]],[[0,23,"pl-s"]],[[0,0,"pl-s"]],[[0,101,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,12,"pl-s"]],[[0,66,"pl-s"]],[[0,9,"pl-s"]],[[0,22,"pl-s"]],[[0,9,"pl-s"]],[[0,32,"pl-s"]],[[0,37,"pl-s"]],[[0,7,"pl-s"]],[[0,44,"pl-s"]],[[0,13,"pl-s"],[12,13,"pl-pds"],[17,26,"pl-s"],[17,18,"pl-pds"]],[[0,44,"pl-s"]],[[0,13,"pl-s"],[12,13,"pl-pds"],[17,26,"pl-s"],[17,18,"pl-pds"]],[[0,20,"pl-s"]],[[0,0,"pl-s"]],[[0,23,"pl-s"]],[[0,9,"pl-s"]],[[0,32,"pl-s"]],[[0,37,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,8,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,15,"pl-s"]],[[0,22,"pl-s"]],[[0,15,"pl-s"],[14,15,"pl-pds"],[18,33,"pl-s"],[18,19,"pl-pds"]],[[0,44,"pl-s"]],[[0,9,"pl-s"],[8,9,"pl-pds"],[12,16,"pl-s"],[12,13,"pl-pds"],[15,16,"pl-pds"],[20,29,"pl-s"],[20,21,"pl-pds"]],[[0,50,"pl-s"]],[[0,44,"pl-s"]],[[0,13,"pl-s"],[12,13,"pl-pds"],[43,52,"pl-s"],[43,44,"pl-pds"]],[[0,38,"pl-s"]],[[0,50,"pl-s"]],[[0,9,"pl-s"],[8,9,"pl-pds"],[15,27,"pl-s"],[15,16,"pl-pds"]],[[0,23,"pl-s"]],[[0,44,"pl-s"]],[[0,45,"pl-s"],[44,45,"pl-pds"],[51,52,"pl-s"],[51,52,"pl-pds"]],[[0,75,"pl-s"]],[[0,44,"pl-s"]],[[0,13,"pl-s"],[12,13,"pl-pds"],[19,28,"pl-s"],[19,20,"pl-pds"]],[[0,60,"pl-s"]],[[0,44,"pl-s"]],[[0,13,"pl-s"],[12,13,"pl-pds"],[17,32,"pl-s"],[17,18,"pl-pds"],[31,32,"pl-pds"],[36,45,"pl-s"],[36,37,"pl-pds"]],[[0,33,"pl-s"]],[[0,22,"pl-s"]],[[0,13,"pl-s"],[12,13,"pl-pds"],[18,27,"pl-s"],[18,19,"pl-pds"]],[[0,41,"pl-s"]],[[0,54,"pl-s"]],[[0,34,"pl-s"]],[[0,39,"pl-s"]],[[0,13,"pl-s"],[12,13,"pl-pds"],[17,20,"pl-s"],[17,18,"pl-pds"]],[[0,0,"pl-s"]],[[0,20,"pl-s"]],[[0,0,"pl-s"]],[[0,40,"pl-s"]],[[0,13,"pl-s"],[12,13,"pl-pds"],[17,20,"pl-s"],[17,18,"pl-pds"]],[[0,21,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,12,"pl-s"]],[[0,0,"pl-s"]],[[0,22,"pl-s"]],[[0,0,"pl-s"]],[[0,101,"pl-s"]],[[0,0,"pl-s"]],[[0,8,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,13,"pl-s"]],[[0,30,"pl-s"]],[[0,52,"pl-s"]],[[0,34,"pl-s"]],[[0,29,"pl-s"]],[[0,16,"pl-s"]],[[0,19,"pl-s"]],[[0,20,"pl-s"],[19,20,"pl-pds"],[23,25,"pl-s"],[23,24,"pl-pds"]],[[0,28,"pl-s"]],[[0,21,"pl-s"]],[[0,14,"pl-s"],[13,14,"pl-pds"],[17,21,"pl-s"],[17,18,"pl-pds"],[20,21,"pl-pds"],[21,25,"pl-c1"],[25,26,"pl-k"],[26,28,"pl-c1"],[28,29,"pl-k"],[29,31,"pl-c1"],[31,35,"pl-s"],[31,32,"pl-pds"],[34,35,"pl-pds"],[35,39,"pl-c1"],[39,40,"pl-k"],[40,42,"pl-c1"],[42,43,"pl-k"],[43,45,"pl-c1"],[46,48,"pl-c1"],[49,51,"pl-c1"],[52,54,"pl-c1"],[54,58,"pl-s"],[54,55,"pl-pds"],[57,58,"pl-pds"],[61,71,"pl-s"],[61,62,"pl-pds"],[70,71,"pl-pds"],[76,80,"pl-s"],[76,77,"pl-pds"],[79,80,"pl-pds"],[84,85,"pl-c1"],[86,89,"pl-c1"],[89,92,"pl-s"],[89,90,"pl-pds"]],[[0,0,"pl-s"]],[[0,16,"pl-s"]],[[0,28,"pl-s"]],[[0,20,"pl-s"],[19,20,"pl-pds"],[23,25,"pl-s"],[23,24,"pl-pds"]],[[0,0,"pl-s"]],[[0,12,"pl-s"]],[[0,16,"pl-s"]],[[0,37,"pl-s"],[36,37,"pl-pds"],[41,42,"pl-s"],[41,42,"pl-pds"]],[[0,20,"pl-s"],[19,20,"pl-pds"],[23,25,"pl-s"],[23,24,"pl-pds"]],[[0,23,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,8,"pl-s"]],[[0,0,"pl-s"]],[[0,42,"pl-s"]],[[0,41,"pl-s"]],[[0,0,"pl-s"]],[[0,12,"pl-s"]],[[0,0,"pl-s"]],[[0,21,"pl-s"]],[[0,0,"pl-s"]],[[0,18,"pl-s"]],[[0,0,"pl-s"]],[[0,101,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,14,"pl-s"]],[[0,0,"pl-s"]],[[0,20,"pl-s"]],[[0,21,"pl-s"]],[[0,20,"pl-s"],[19,20,"pl-pds"],[23,25,"pl-s"],[23,24,"pl-pds"]],[[0,24,"pl-s"]],[[0,21,"pl-s"]],[[0,0,"pl-s"]],[[0,45,"pl-s"],[42,43,"pl-pds"],[43,44,"pl-pds"]],[[0,48,"pl-s"],[26,27,"pl-pds"],[27,28,"pl-pds"],[47,48,"pl-pds"],[51,53,"pl-s"],[51,52,"pl-pds"]],[[0,0,"pl-s"]],[[0,22,"pl-s"]],[[0,0,"pl-s"]],[[0,9,"pl-s"]],[[0,20,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,8,"pl-s"]],[[0,0,"pl-s"]],[[0,25,"pl-s"]],[[0,41,"pl-s"]],[[0,60,"pl-s"]],[[0,0,"pl-s"]],[[0,12,"pl-s"]],[[0,0,"pl-s"]],[[0,8,"pl-s"]],[[0,0,"pl-s"]],[[0,101,"pl-s"]],[[0,0,"pl-s"]],[[0,18,"pl-s"]],[[0,0,"pl-s"]],[[0,21,"pl-s"]],[[0,14,"pl-s"]],[[0,13,"pl-s"]],[[0,15,"pl-s"]],[[0,31,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,19,"pl-s"]],[[0,21,"pl-s"]],[[0,27,"pl-s"]],[[0,38,"pl-s"],[35,36,"pl-pds"],[36,37,"pl-pds"]],[[0,36,"pl-s"]],[[0,36,"pl-s"]],[[0,32,"pl-s"]],[[0,2,"pl-s"]],[[0,0,"pl-s"]],[[0,60,"pl-s"],[59,60,"pl-pds"],[63,75,"pl-s"],[63,64,"pl-pds"]],[[0,60,"pl-s"],[59,60,"pl-pds"],[62,74,"pl-s"],[62,63,"pl-pds"]],[[0,60,"pl-s"],[59,60,"pl-pds"],[62,74,"pl-s"],[62,63,"pl-pds"]],[[0,60,"pl-s"],[59,60,"pl-pds"],[62,74,"pl-s"],[62,63,"pl-pds"]],[[0,60,"pl-s"],[59,60,"pl-pds"],[62,74,"pl-s"],[62,63,"pl-pds"]],[[0,60,"pl-s"],[59,60,"pl-pds"],[63,75,"pl-s"],[63,64,"pl-pds"]],[[0,60,"pl-s"],[59,60,"pl-pds"],[62,74,"pl-s"],[62,63,"pl-pds"]],[[0,60,"pl-s"],[59,60,"pl-pds"],[62,74,"pl-s"],[62,63,"pl-pds"]],[[0,0,"pl-s"]],[[0,22,"pl-s"]],[[0,0,"pl-s"]],[[0,15,"pl-s"]],[[0,22,"pl-s"]],[[0,23,"pl-s"]],[[0,35,"pl-s"]],[[0,22,"pl-s"]],[[0,37,"pl-s"]],[[0,22,"pl-s"]],[[0,45,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,18,"pl-s"]],[[0,0,"pl-s"]],[[0,101,"pl-s"]],[[0,0,"pl-s"]],[[0,23,"pl-s"]],[[0,0,"pl-s"]],[[0,101,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,15,"pl-s"]],[[0,0,"pl-s"]],[[0,12,"pl-s"]],[[0,51,"pl-s"]],[[0,17,"pl-s"]],[[0,60,"pl-s"]],[[0,14,"pl-s"]],[[0,18,"pl-s"],[17,18,"pl-pds"],[20,70,"pl-s"],[20,21,"pl-pds"]],[[0,14,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,101,"pl-s"]],[[0,0,"pl-s"]],[[0,22,"pl-s"]],[[0,0,"pl-s"]],[[0,101,"pl-s"]],[[0,0,"pl-s"]],[[0,24,"pl-s"]],[[0,0,"pl-s"]],[[0,21,"pl-s"]],[[0,0,"pl-s"]],[[0,15,"pl-s"]],[[0,16,"pl-s"]],[[0,50,"pl-s"]],[[0,24,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,12,"pl-s"]],[[0,15,"pl-s"]],[[0,22,"pl-s"]],[[0,17,"pl-s"],[16,17,"pl-pds"],[19,20,"pl-s"],[19,20,"pl-pds"]],[[0,17,"pl-s"]],[[0,22,"pl-s"]],[[0,19,"pl-s"]],[[0,18,"pl-s"]],[[0,0,"pl-s"]],[[0,22,"pl-s"]],[[0,39,"pl-s"]],[[0,1,"pl-s"]],[[0,32,"pl-s"]],[[0,21,"pl-s"]],[[0,26,"pl-s"]],[[0,18,"pl-s"]],[[0,21,"pl-s"]],[[0,24,"pl-s"]],[[0,35,"pl-s"]],[[0,19,"pl-s"]],[[0,21,"pl-s"]],[[0,44,"pl-s"]],[[0,34,"pl-s"],[33,34,"pl-pds"],[36,37,"pl-s"],[36,37,"pl-pds"]],[[0,22,"pl-s"]],[[0,21,"pl-s"]],[[0,39,"pl-s"]],[[0,21,"pl-s"]],[[0,60,"pl-s"]],[[0,22,"pl-s"]],[[0,22,"pl-s"]],[[0,43,"pl-s"]],[[0,22,"pl-s"]],[[0,28,"pl-s"]],[[0,15,"pl-s"]],[[0,22,"pl-s"]],[[0,20,"pl-s"],[19,20,"pl-pds"],[22,23,"pl-s"],[22,23,"pl-pds"]],[[0,21,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,23,"pl-s"]],[[0,0,"pl-s"]],[[0,101,"pl-s"]],[[0,0,"pl-s"]],[[0,43,"pl-s"]],[[0,9,"pl-s"]],[[0,19,"pl-s"]],[[0,28,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,15,"pl-s"]],[[0,18,"pl-s"]],[[0,22,"pl-s"]],[[0,15,"pl-s"]],[[0,31,"pl-s"]],[[0,71,"pl-s"]],[[0,27,"pl-s"]],[[0,40,"pl-s"]],[[0,69,"pl-s"]],[[0,20,"pl-s"],[19,20,"pl-pds"],[22,23,"pl-s"],[22,23,"pl-pds"]],[[0,22,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,10,"pl-s"]],[[0,0,"pl-s"]],[[0,9,"pl-s"]],[[0,0,"pl-s"]],[[0,101,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,18,"pl-s"]],[[0,16,"pl-s"]],[[0,29,"pl-s"]],[[0,21,"pl-s"]],[[0,28,"pl-s"]],[[0,16,"pl-s"]],[[0,19,"pl-s"]],[[0,28,"pl-s"]],[[0,39,"pl-s"]],[[0,27,"pl-s"]],[[0,28,"pl-s"]],[[0,41,"pl-s"]],[[0,18,"pl-s"]],[[0,21,"pl-s"]],[[0,24,"pl-s"],[23,24,"pl-pds"],[27,30,"pl-s"],[27,28,"pl-pds"]],[[0,24,"pl-s"],[23,24,"pl-pds"],[28,31,"pl-s"],[28,29,"pl-pds"]],[[0,24,"pl-s"],[23,24,"pl-pds"],[28,31,"pl-s"],[28,29,"pl-pds"]],[[0,29,"pl-s"]],[[0,18,"pl-s"]],[[0,0,"pl-s"]],[[0,30,"pl-s"]],[[0,34,"pl-s"]],[[0,0,"pl-s"]],[[0,0,"pl-s"]],[[0,13,"pl-s"]],[[0,15,"pl-s"]],[[0,30,"pl-s"]],[[0,23,"pl-s"]],[[0,76,"pl-s"]],[[0,22,"pl-s"]],[[0,50,"pl-s"]],[[0,16,"pl-s"]],[[0,44,"pl-s"]],[[0,32,"pl-s"]],[[0,0,"pl-s"]],[[0,11,"pl-s"]],[[0,6,"pl-s"]],[[0,14,"pl-s"]],[[0,30,"pl-s"]],[[0,13,"pl-s"]],[[0,50,"pl-s"]],[[0,0,"pl-s"]],[[0,17,"pl-s"]],[[0,27,"pl-s"]],[[0,68,"pl-s"]],[[0,14,"pl-s"]],[[0,0,"pl-s"]],[[0,16,"pl-s"]],[[0,65,"pl-s"]],[[0,14,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,7,"pl-s"]],[[0,0,"pl-s"]],[[0,30,"pl-s"]],[[0,0,"pl-s"]],[[0,101,"pl-s"]],[[0,0,"pl-s"]],[[0,7,"pl-s"]],[[0,0,"pl-s"]],[[0,23,"pl-s"]],[[0,0,"pl-s"]],[[0,101,"pl-s"]],[[0,0,"pl-s"]],[[0,11,"pl-s"]],[[0,0,"pl-s"]],[[0,30,"pl-s"]],[[0,0,"pl-s"]],[[0,101,"pl-s"]],[[0,0,"pl-s"]],[[0,23,"pl-s"]],[[0,0,"pl-s"]],[[0,101,"pl-s"]],[[0,0,"pl-s"]],[[0,26,"pl-s"]],[[0,0,"pl-s"]],[[0,101,"pl-s"]],[[0,0,"pl-s"]],[[0,27,"pl-s"]],[[0,0,"pl-s"]],[[0,19,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,26,"pl-s"]],[[0,50,"pl-s"]],[[0,40,"pl-s"]],[[0,35,"pl-s"]],[[0,2,"pl-s"]],[[0,0,"pl-s"]],[[0,29,"pl-s"],[28,29,"pl-pds"],[39,43,"pl-s"],[39,40,"pl-pds"],[42,43,"pl-pds"],[51,55,"pl-s"],[51,52,"pl-pds"]],[[0,6,"pl-s"],[5,6,"pl-pds"],[14,18,"pl-s"],[14,15,"pl-pds"],[17,18,"pl-pds"],[24,28,"pl-s"],[24,25,"pl-pds"]],[[0,6,"pl-s"],[5,6,"pl-pds"],[11,15,"pl-s"],[11,12,"pl-pds"],[14,15,"pl-pds"],[22,26,"pl-s"],[22,23,"pl-pds"]],[[0,6,"pl-s"],[5,6,"pl-pds"],[16,20,"pl-s"],[16,17,"pl-pds"],[19,20,"pl-pds"],[26,29,"pl-s"],[26,27,"pl-pds"]],[[0,0,"pl-s"]],[[0,19,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,0,"pl-s"]],[[0,16,"pl-s"]],[[0,55,"pl-s"]],[[0,45,"pl-s"]],[[0,41,"pl-s"]],[[0,32,"pl-s"]],[[0,31,"pl-s"]],[[0,33,"pl-s"]],[[0,28,"pl-s"]],[[0,53,"pl-s"]],[[0,2,"pl-s"]],[[0,0,"pl-s"]],[[0,9,"pl-s"]],[[0,31,"pl-s"],[30,31,"pl-pds"],[36,40,"pl-s"],[36,37,"pl-pds"],[39,40,"pl-pds"],[45,55,"pl-s"],[45,46,"pl-pds"],[54,55,"pl-pds"],[55,59,"pl-c1"],[59,60,"pl-k"],[60,62,"pl-c1"],[62,63,"pl-k"],[63,65,"pl-c1"],[65,87,"pl-s"],[65,66,"pl-pds"]],[[0,8,"pl-s"],[7,8,"pl-pds"],[13,17,"pl-s"],[13,14,"pl-pds"],[16,17,"pl-pds"],[25,35,"pl-s"],[25,26,"pl-pds"],[34,35,"pl-pds"],[35,39,"pl-c1"],[39,40,"pl-k"],[40,41,"pl-c1"],[41,42,"pl-k"],[42,44,"pl-c1"],[44,70,"pl-s"],[44,45,"pl-pds"]],[[0,8,"pl-s"],[7,8,"pl-pds"],[12,16,"pl-s"],[12,13,"pl-pds"],[15,16,"pl-pds"],[24,34,"pl-s"],[24,25,"pl-pds"],[33,34,"pl-pds"],[34,38,"pl-c1"],[38,39,"pl-k"],[39,40,"pl-c1"],[40,41,"pl-k"],[41,43,"pl-c1"],[43,69,"pl-s"],[43,44,"pl-pds"]],[[0,8,"pl-s"],[7,8,"pl-pds"],[13,17,"pl-s"],[13,14,"pl-pds"],[16,17,"pl-pds"],[24,34,"pl-s"],[24,25,"pl-pds"],[33,34,"pl-pds"],[34,38,"pl-c1"],[38,39,"pl-k"],[39,40,"pl-c1"],[40,41,"pl-k"],[41,42,"pl-c1"],[42,64,"pl-s"],[42,43,"pl-pds"]],[[0,8,"pl-s"],[7,8,"pl-pds"],[14,18,"pl-s"],[14,15,"pl-pds"],[17,18,"pl-pds"],[26,36,"pl-s"],[26,27,"pl-pds"],[35,36,"pl-pds"],[36,40,"pl-c1"],[40,41,"pl-k"],[41,42,"pl-c1"],[42,43,"pl-k"],[43,45,"pl-c1"],[45,69,"pl-s"],[45,46,"pl-pds"]],[[0,8,"pl-s"],[7,8,"pl-pds"],[13,16,"pl-s"],[13,14,"pl-pds"],[15,16,"pl-pds"],[23,32,"pl-s"],[23,24,"pl-pds"],[31,32,"pl-pds"],[32,36,"pl-c1"],[36,37,"pl-k"],[37,38,"pl-c1"],[38,39,"pl-k"],[39,40,"pl-c1"],[40,62,"pl-s"],[40,41,"pl-pds"]],[[0,8,"pl-s"],[7,8,"pl-pds"],[13,16,"pl-s"],[13,14,"pl-pds"],[15,16,"pl-pds"],[23,33,"pl-s"],[23,24,"pl-pds"],[32,33,"pl-pds"],[33,37,"pl-c1"],[37,38,"pl-k"],[38,39,"pl-c1"],[39,40,"pl-k"],[40,41,"pl-c1"],[41,62,"pl-s"],[41,42,"pl-pds"]],[[0,8,"pl-s"],[7,8,"pl-pds"],[13,16,"pl-s"],[13,14,"pl-pds"],[15,16,"pl-pds"],[23,32,"pl-s"],[23,24,"pl-pds"],[31,32,"pl-pds"],[32,36,"pl-c1"],[36,37,"pl-k"],[37,38,"pl-c1"],[38,39,"pl-k"],[39,41,"pl-c1"],[41,62,"pl-s"],[41,42,"pl-pds"]],[[0,8,"pl-s"],[7,8,"pl-pds"],[12,15,"pl-s"],[12,13,"pl-pds"],[14,15,"pl-pds"],[24,32,"pl-s"],[24,25,"pl-pds"],[31,32,"pl-pds"],[32,36,"pl-c1"],[36,37,"pl-k"],[37,39,"pl-c1"],[39,40,"pl-k"],[40,42,"pl-c1"],[42,63,"pl-s"],[42,43,"pl-pds"]],[[0,8,"pl-s"],[7,8,"pl-pds"],[14,18,"pl-s"],[14,15,"pl-pds"],[17,18,"pl-pds"],[26,35,"pl-s"],[26,27,"pl-pds"],[34,35,"pl-pds"],[35,39,"pl-c1"],[39,40,"pl-k"],[40,41,"pl-c1"],[41,42,"pl-k"],[42,43,"pl-c1"],[43,66,"pl-s"],[43,44,"pl-pds"]],[[0,8,"pl-s"],[7,8,"pl-pds"],[13,16,"pl-s"],[13,14,"pl-pds"],[15,16,"pl-pds"],[21,30,"pl-s"],[21,22,"pl-pds"],[29,30,"pl-pds"],[30,34,"pl-c1"],[34,35,"pl-k"],[35,37,"pl-c1"],[37,38,"pl-k"],[38,39,"pl-c1"],[39,59,"pl-s"],[39,40,"pl-pds"]],[[0,8,"pl-s"],[7,8,"pl-pds"],[12,16,"pl-s"],[12,13,"pl-pds"],[15,16,"pl-pds"],[23,31,"pl-s"],[23,24,"pl-pds"],[30,31,"pl-pds"],[31,35,"pl-c1"],[35,36,"pl-k"],[36,38,"pl-c1"],[38,39,"pl-k"],[39,40,"pl-c1"],[40,62,"pl-s"],[40,41,"pl-pds"]],[[0,7,"pl-s"],[6,7,"pl-pds"],[13,16,"pl-s"],[13,14,"pl-pds"],[15,16,"pl-pds"],[21,29,"pl-s"],[21,22,"pl-pds"],[28,29,"pl-pds"],[29,33,"pl-c1"],[33,34,"pl-k"],[34,35,"pl-c1"],[35,36,"pl-k"],[36,38,"pl-c1"],[38,59,"pl-s"],[38,39,"pl-pds"]],[[0,0,"pl-s"]],[[0,18,"pl-s"]],[[0,0,"pl-s"]],[[0,7,"pl-s"]],[[0,6,"pl-s"]],[[0,21,"pl-s"]],[[0,1,"pl-s"]],[[0,54,"pl-s"]],[[0,45,"pl-s"]],[[0,43,"pl-s"]],[[0,2,"pl-s"]],[[0,0,"pl-s"]],[[0,41,"pl-s"]],[[0,42,"pl-s"]],[[0,42,"pl-s"]],[[0,42,"pl-s"]],[[0,42,"pl-s"]],[[0,0,"pl-s"]],[[0,23,"pl-s"]],[[0,19,"pl-s"]],[[0,18,"pl-s"]],[[0,0,"pl-s"]],[[0,21,"pl-s"]],[[0,27,"pl-s"]],[[0,22,"pl-s"]],[[0,22,"pl-s"]],[[0,26,"pl-s"]],[[0,12,"pl-s"]],[[0,35,"pl-s"]],[[0,28,"pl-s"]],[[0,18,"pl-s"]],[[0,45,"pl-s"]],[[0,28,"pl-s"]],[[0,0,"pl-s"]],[[0,25,"pl-s"]],[[0,27,"pl-s"]],[[0,36,"pl-s"]],[[0,40,"pl-s"]],[[0,33,"pl-s"]],[[0,0,"pl-s"]],[[0,33,"pl-s"]],[[0,0,"pl-s"]],[[0,29,"pl-s"]],[[0,21,"pl-s"]],[[0,38,"pl-s"]],[[0,15,"pl-s"]],[[0,0,"pl-s"]],[[0,24,"pl-s"]],[[0,25,"pl-s"]],[[0,25,"pl-s"]],[[0,9,"pl-s"]],[[0,35,"pl-s"]],[[0,25,"pl-s"]],[[0,25,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,10,"pl-s"]],[[0,0,"pl-s"]],[[0,101,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,28,"pl-s"]],[[0,23,"pl-s"]],[[0,31,"pl-s"]],[[0,44,"pl-s"]],[[0,22,"pl-s"],[21,22,"pl-pds"],[27,44,"pl-s"],[27,28,"pl-pds"]],[[0,0,"pl-s"]],[[0,60,"pl-s"]],[[0,26,"pl-s"]],[[0,14,"pl-s"],[13,14,"pl-pds"],[25,29,"pl-s"],[25,26,"pl-pds"],[28,29,"pl-pds"],[33,47,"pl-s"],[33,34,"pl-pds"]],[[0,0,"pl-s"]],[[0,25,"pl-s"]],[[0,29,"pl-s"]],[[0,0,"pl-s"]],[[0,25,"pl-s"]],[[0,0,"pl-s"]],[[0,29,"pl-s"]],[[0,50,"pl-s"]],[[0,51,"pl-s"]],[[0,31,"pl-s"]],[[0,0,"pl-s"]],[[0,34,"pl-s"]],[[0,30,"pl-s"]],[[0,44,"pl-s"]],[[0,35,"pl-s"]],[[0,22,"pl-s"]],[[0,27,"pl-s"],[26,27,"pl-pds"],[34,38,"pl-s"],[34,35,"pl-pds"],[37,38,"pl-pds"],[40,53,"pl-s"],[40,41,"pl-pds"]],[[0,0,"pl-s"]],[[0,40,"pl-s"]],[[0,15,"pl-s"],[14,15,"pl-pds"],[18,22,"pl-s"],[18,19,"pl-pds"],[21,22,"pl-pds"],[25,38,"pl-s"],[25,26,"pl-pds"]],[[0,42,"pl-s"]],[[0,37,"pl-s"]],[[0,25,"pl-s"]],[[0,39,"pl-s"]],[[0,0,"pl-s"]],[[0,50,"pl-s"]],[[0,14,"pl-s"]],[[0,14,"pl-s"],[13,14,"pl-pds"],[21,34,"pl-s"],[21,22,"pl-pds"]],[[0,14,"pl-s"],[13,14,"pl-pds"],[22,35,"pl-s"],[22,23,"pl-pds"]],[[0,13,"pl-s"],[12,13,"pl-pds"],[25,38,"pl-s"],[25,26,"pl-pds"]],[[0,0,"pl-s"]],[[0,29,"pl-s"]],[[0,7,"pl-s"]],[[0,26,"pl-s"]],[[0,20,"pl-s"]],[[0,0,"pl-s"]],[[0,75,"pl-s"]],[[0,12,"pl-s"]],[[0,0,"pl-s"]],[[0,68,"pl-s"]],[[0,11,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,9,"pl-s"]],[[0,0,"pl-s"]],[[0,101,"pl-s"]],[[0,0,"pl-s"]],[[0,77,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,11,"pl-s"]],[[0,0,"pl-s"]],[[0,15,"pl-s"]],[[0,26,"pl-s"]],[[0,31,"pl-s"]],[[0,25,"pl-s"]],[[0,42,"pl-s"]],[[0,31,"pl-s"]],[[0,0,"pl-s"]],[[0,39,"pl-s"]],[[0,28,"pl-s"]],[[0,32,"pl-s"]],[[0,29,"pl-s"]],[[0,34,"pl-s"]],[[0,0,"pl-s"]],[[0,39,"pl-s"]],[[0,29,"pl-s"]],[[0,0,"pl-s"]],[[0,47,"pl-s"]],[[0,37,"pl-s"]],[[0,0,"pl-s"]],[[0,29,"pl-s"]],[[0,0,"pl-s"]],[[0,39,"pl-s"]],[[0,36,"pl-s"]],[[0,35,"pl-s"]],[[0,28,"pl-s"]],[[0,0,"pl-s"]],[[0,51,"pl-s"]],[[0,43,"pl-s"]],[[0,62,"pl-s"]],[[0,24,"pl-s"]],[[0,0,"pl-s"]],[[0,37,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,11,"pl-s"]],[[0,0,"pl-s"]],[[0,101,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,11,"pl-s"]],[[0,0,"pl-s"]],[[0,25,"pl-s"]],[[0,32,"pl-s"]],[[0,25,"pl-s"]],[[0,33,"pl-s"]],[[0,31,"pl-s"]],[[0,38,"pl-s"]],[[0,0,"pl-s"]],[[0,12,"pl-s"]],[[0,17,"pl-s"]],[[0,10,"pl-s"]],[[0,22,"pl-s"]],[[0,21,"pl-s"]],[[0,1,"pl-s"]],[[0,1,"pl-s"]],[[0,9,"pl-s"]],[[0,16,"pl-s"]],[[0,12,"pl-s"],[11,12,"pl-pds"],[16,41,"pl-s"],[16,17,"pl-pds"]],[[0,27,"pl-s"],[26,27,"pl-pds"],[31,41,"pl-s"],[31,32,"pl-pds"]],[[0,27,"pl-s"],[26,27,"pl-pds"],[31,41,"pl-s"],[31,32,"pl-pds"]],[[0,0,"pl-s"]],[[0,18,"pl-s"]],[[0,23,"pl-s"]],[[0,0,"pl-s"]],[[0,8,"pl-s"]],[[0,30,"pl-s"]],[[0,36,"pl-s"]],[[0,10,"pl-s"]],[[0,29,"pl-s"]],[[0,9,"pl-s"]],[[0,9,"pl-s"]],[[0,55,"pl-s"]],[[0,0,"pl-s"]],[[0,9,"pl-s"]],[[0,9,"pl-s"]],[[0,56,"pl-s"]],[[0,0,"pl-s"]],[[0,48,"pl-s"]],[[0,17,"pl-s"],[16,17,"pl-pds"],[17,21,"pl-c1"],[21,22,"pl-k"],[22,24,"pl-c1"],[24,25,"pl-k"],[25,27,"pl-c1"],[27,31,"pl-s"],[27,28,"pl-pds"],[30,31,"pl-pds"],[31,35,"pl-c1"],[35,36,"pl-k"],[36,38,"pl-c1"],[38,39,"pl-k"],[39,41,"pl-c1"],[41,54,"pl-s"],[41,42,"pl-pds"]],[[0,45,"pl-s"]],[[0,24,"pl-s"],[23,24,"pl-pds"],[24,28,"pl-c1"],[28,29,"pl-k"],[29,31,"pl-c1"],[31,32,"pl-k"],[32,34,"pl-c1"],[34,47,"pl-s"],[34,35,"pl-pds"]],[[0,40,"pl-s"]],[[0,21,"pl-s"]],[[0,49,"pl-s"]],[[0,38,"pl-s"]],[[0,4,"pl-s"],[3,4,"pl-pds"],[4,8,"pl-c1"],[8,9,"pl-k"],[9,11,"pl-c1"],[11,12,"pl-k"],[12,14,"pl-c1"],[14,42,"pl-s"],[14,15,"pl-pds"]],[[0,26,"pl-s"],[25,26,"pl-pds"],[26,30,"pl-c1"],[30,31,"pl-k"],[31,33,"pl-c1"],[33,34,"pl-k"],[34,36,"pl-c1"],[36,65,"pl-s"],[36,37,"pl-pds"]],[[0,11,"pl-s"]],[[0,1,"pl-s"]],[[0,17,"pl-s"],[16,17,"pl-pds"],[17,19,"pl-c1"],[20,22,"pl-c1"],[23,25,"pl-c1"],[25,29,"pl-s"],[25,26,"pl-pds"],[28,29,"pl-pds"],[29,31,"pl-c1"],[32,34,"pl-c1"],[35,37,"pl-c1"],[37,50,"pl-s"],[37,38,"pl-pds"]],[[0,0,"pl-s"]],[[0,33,"pl-s"]],[[0,29,"pl-s"]],[[0,30,"pl-s"]],[[0,28,"pl-s"]],[[0,14,"pl-s"],[13,14,"pl-pds"],[14,18,"pl-c1"],[18,19,"pl-k"],[19,21,"pl-c1"],[21,22,"pl-k"],[22,24,"pl-c1"],[24,37,"pl-s"],[24,25,"pl-pds"]],[[0,41,"pl-s"]],[[0,34,"pl-s"]],[[0,58,"pl-s"]],[[0,25,"pl-s"]],[[0,44,"pl-s"]],[[0,5,"pl-s"]],[[0,34,"pl-s"],[33,34,"pl-pds"],[36,37,"pl-k"],[39,40,"pl-k"],[42,55,"pl-s"],[42,43,"pl-pds"]],[[0,34,"pl-s"],[33,34,"pl-pds"],[36,37,"pl-k"],[39,40,"pl-k"],[51,64,"pl-s"],[51,52,"pl-pds"]],[[0,0,"pl-s"]],[[0,28,"pl-s"],[25,27,"pl-cce"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,10,"pl-s"]],[[0,0,"pl-s"]],[[0,101,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,14,"pl-s"]],[[0,0,"pl-s"]],[[0,14,"pl-s"]],[[0,29,"pl-s"]],[[0,38,"pl-s"]],[[0,25,"pl-s"]],[[0,18,"pl-s"]],[[0,0,"pl-s"]],[[0,42,"pl-s"]],[[0,49,"pl-s"]],[[0,12,"pl-s"],[11,12,"pl-pds"],[21,34,"pl-s"],[21,22,"pl-pds"]],[[0,19,"pl-s"],[18,19,"pl-pds"],[28,42,"pl-s"],[28,29,"pl-pds"]],[[0,0,"pl-s"]],[[0,19,"pl-s"]],[[0,27,"pl-s"]],[[0,11,"pl-s"]],[[0,41,"pl-s"],[37,38,"pl-pds"],[38,39,"pl-pds"]],[[0,35,"pl-s"],[31,32,"pl-pds"],[32,33,"pl-pds"]],[[0,27,"pl-s"]],[[0,14,"pl-s"],[13,14,"pl-pds"],[17,25,"pl-s"],[17,18,"pl-pds"],[24,25,"pl-pds"],[34,38,"pl-s"],[34,35,"pl-pds"]],[[0,29,"pl-s"]],[[0,0,"pl-s"]],[[0,40,"pl-s"]],[[0,15,"pl-s"],[14,15,"pl-pds"],[18,35,"pl-s"],[18,19,"pl-pds"],[34,35,"pl-pds"],[44,48,"pl-s"],[44,45,"pl-pds"]],[[0,0,"pl-s"]],[[0,0,"pl-s"]],[[0,54,"pl-s"]],[[0,0,"pl-s"]],[[0,17,"pl-s"],[16,17,"pl-pds"],[26,89,"pl-s"],[26,27,"pl-pds"]],[[0,0,"pl-s"]],[[0,0,"pl-s"]],[[0,51,"pl-s"],[28,30,"pl-cce"]],[[0,23,"pl-s"]],[[0,23,"pl-s"]],[[0,24,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,9,"pl-s"]],[[0,0,"pl-s"]],[[0,101,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,10,"pl-s"]],[[0,0,"pl-s"]],[[0,58,"pl-s"]],[[0,17,"pl-s"],[16,17,"pl-pds"],[19,23,"pl-s"],[19,20,"pl-pds"],[22,23,"pl-pds"],[25,38,"pl-s"],[25,26,"pl-pds"]],[[0,55,"pl-s"]],[[0,22,"pl-s"],[21,22,"pl-pds"],[24,37,"pl-s"],[24,25,"pl-pds"]],[[0,83,"pl-s"]],[[0,57,"pl-s"]],[[0,0,"pl-s"]],[[0,12,"pl-s"]],[[0,17,"pl-s"],[16,17,"pl-pds"],[21,31,"pl-s"],[21,22,"pl-pds"]],[[0,18,"pl-s"],[17,18,"pl-pds"],[21,23,"pl-s"],[21,22,"pl-pds"]],[[0,7,"pl-s"],[6,7,"pl-pds"],[11,16,"pl-s"],[11,12,"pl-pds"]],[[0,0,"pl-s"]],[[0,37,"pl-s"]],[[0,49,"pl-s"]],[[0,42,"pl-s"]],[[0,10,"pl-s"]],[[0,31,"pl-s"]],[[0,10,"pl-s"]],[[0,52,"pl-s"]],[[0,35,"pl-s"]],[[0,0,"pl-s"]],[[0,27,"pl-s"]],[[0,14,"pl-s"],[13,14,"pl-pds"],[19,27,"pl-s"],[19,20,"pl-pds"],[26,27,"pl-pds"],[29,31,"pl-s"],[29,30,"pl-pds"]],[[0,14,"pl-s"],[13,14,"pl-pds"],[21,29,"pl-s"],[21,22,"pl-pds"],[28,29,"pl-pds"],[31,32,"pl-s"],[31,32,"pl-pds"]],[[0,14,"pl-s"],[13,14,"pl-pds"],[22,30,"pl-s"],[22,23,"pl-pds"],[29,30,"pl-pds"],[34,36,"pl-s"],[34,35,"pl-pds"]],[[0,20,"pl-s"],[19,20,"pl-pds"],[23,24,"pl-s"],[23,24,"pl-pds"]],[[0,11,"pl-s"]],[[0,0,"pl-s"]],[[0,18,"pl-s"]],[[0,19,"pl-s"]],[[0,23,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,16,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,7,"pl-s"]],[[0,14,"pl-s"]],[[0,23,"pl-s"]],[[0,35,"pl-s"]],[[0,17,"pl-s"]],[[0,19,"pl-s"],[18,19,"pl-pds"],[19,23,"pl-c1"],[23,24,"pl-k"],[24,26,"pl-c1"],[26,27,"pl-k"],[27,29,"pl-c1"],[29,30,"pl-s"],[29,30,"pl-pds"]],[[0,20,"pl-s"]],[[0,29,"pl-s"]],[[0,22,"pl-s"]],[[0,26,"pl-s"]],[[0,19,"pl-s"],[18,19,"pl-pds"],[21,22,"pl-s"],[21,22,"pl-pds"]],[[0,29,"pl-s"]],[[0,26,"pl-s"]],[[0,19,"pl-s"],[18,19,"pl-pds"],[23,24,"pl-s"],[23,24,"pl-pds"]],[[0,0,"pl-s"]],[[0,19,"pl-s"]],[[0,17,"pl-s"]],[[0,19,"pl-s"]],[[0,11,"pl-s"]],[[0,9,"pl-s"]],[[0,0,"pl-s"]],[[0,15,"pl-s"]],[[0,32,"pl-s"]],[[0,17,"pl-s"]],[[0,14,"pl-s"]],[[0,32,"pl-s"]],[[0,0,"pl-s"]],[[0,17,"pl-s"]],[[0,32,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,8,"pl-s"]],[[0,0,"pl-s"]],[[0,36,"pl-s"]],[[0,43,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,7,"pl-s"]],[[0,42,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,18,"pl-s"]],[[0,16,"pl-s"]],[[0,12,"pl-s"]],[[0,6,"pl-s"]],[[0,18,"pl-s"]],[[0,16,"pl-s"]],[[0,12,"pl-s"]],[[0,6,"pl-s"]],[[0,18,"pl-s"]],[[0,16,"pl-s"]],[[0,12,"pl-s"]],[[0,10,"pl-s"]],[[0,17,"pl-s"]],[[0,16,"pl-s"]],[[0,34,"pl-s"]],[[0,1,"pl-s"]],[[0,5,"pl-s"]],[[0,43,"pl-s"]],[[0,20,"pl-s"]],[[0,48,"pl-s"]],[[0,36,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,15,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,17,"pl-s"]],[[0,0,"pl-s"]],[[0,24,"pl-s"]],[[0,31,"pl-s"]],[[0,10,"pl-s"]],[[0,15,"pl-s"]],[[0,25,"pl-s"]],[[0,83,"pl-s"]],[[0,28,"pl-s"]],[[0,10,"pl-s"]],[[0,0,"pl-s"]],[[0,24,"pl-s"]],[[0,49,"pl-s"]],[[0,10,"pl-s"]],[[0,0,"pl-s"]],[[0,39,"pl-s"]],[[0,10,"pl-s"]],[[0,0,"pl-s"]],[[0,37,"pl-s"]],[[0,27,"pl-s"]],[[0,11,"pl-s"]],[[0,0,"pl-s"]],[[0,19,"pl-s"]],[[0,26,"pl-s"]],[[0,27,"pl-s"]],[[0,10,"pl-s"]],[[0,0,"pl-s"]],[[0,15,"pl-s"]],[[0,3,"pl-s"]],[[0,19,"pl-s"]],[[0,0,"pl-s"]],[[0,0,"pl-s"]],[[0,0,"pl-s"]],[[0,34,"pl-s"]],[[0,45,"pl-s"]],[[0,21,"pl-s"]],[[0,0,"pl-s"]],[[0,34,"pl-s"]],[[0,9,"pl-s"]],[[0,16,"pl-s"]],[[0,23,"pl-s"]],[[0,22,"pl-s"]],[[0,11,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,11,"pl-s"]],[[0,0,"pl-s"]],[[0,91,"pl-s"]],[[0,0,"pl-s"]],[[0,101,"pl-s"]],[[0,0,"pl-s"]],[[0,13,"pl-s"]],[[0,0,"pl-s"]],[[0,10,"pl-s"]],[[0,0,"pl-s"]],[[0,17,"pl-s"]],[[0,0,"pl-s"]],[[0,44,"pl-s"]],[[0,35,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,7,"pl-s"]],[[0,29,"pl-s"]],[[0,2,"pl-s"]],[[0,20,"pl-s"]],[[0,18,"pl-s"]],[[0,44,"pl-s"]],[[0,27,"pl-s"]],[[0,2,"pl-s"]],[[0,33,"pl-s"]],[[0,16,"pl-s"]],[[0,31,"pl-s"]],[[0,1,"pl-s"]],[[0,18,"pl-s"]],[[0,19,"pl-s"]],[[0,23,"pl-s"]],[[0,36,"pl-s"]],[[0,26,"pl-s"]],[[0,20,"pl-s"]],[[0,33,"pl-s"]],[[0,16,"pl-s"]],[[0,51,"pl-s"]],[[0,0,"pl-s"]],[[0,24,"pl-s"]],[[0,0,"pl-s"]],[[0,21,"pl-s"]],[[0,23,"pl-s"]],[[0,28,"pl-s"]],[[0,25,"pl-s"]],[[0,20,"pl-s"]],[[0,36,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,7,"pl-s"]],[[0,0,"pl-s"]],[[0,28,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,12,"pl-s"]],[[0,0,"pl-s"]],[[0,24,"pl-s"]],[[0,0,"pl-s"]],[[0,32,"pl-s"]],[[0,26,"pl-s"]],[[0,10,"pl-s"]],[[0,25,"pl-s"]],[[0,34,"pl-s"]],[[0,33,"pl-s"]],[[0,24,"pl-s"],[23,24,"pl-pds"],[27,47,"pl-s"],[27,28,"pl-pds"],[46,47,"pl-pds"],[50,51,"pl-s"],[50,51,"pl-pds"]],[[0,40,"pl-s"]],[[0,31,"pl-s"]],[[0,18,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,13,"pl-s"]],[[0,0,"pl-s"]],[[0,10,"pl-s"]],[[0,0,"pl-s"]],[[0,35,"pl-s"]],[[0,0,"pl-s"]],[[0,9,"pl-s"]],[[0,0,"pl-s"]],[[0,20,"pl-s"]],[[0,0,"pl-s"]],[[0,9,"pl-s"]],[[0,0,"pl-s"]],[[0,29,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,9,"pl-s"]],[[0,27,"pl-s"]],[[0,2,"pl-s"]],[[0,20,"pl-s"]],[[0,27,"pl-s"]],[[0,2,"pl-s"]],[[0,14,"pl-s"]],[[0,10,"pl-s"]],[[0,16,"pl-s"],[15,16,"pl-pds"],[21,22,"pl-s"],[21,22,"pl-pds"]],[[0,0,"pl-s"]],[[0,10,"pl-s"]],[[0,9,"pl-s"]],[[0,9,"pl-s"]],[[0,17,"pl-s"]],[[0,16,"pl-s"]],[[0,11,"pl-s"]],[[0,17,"pl-s"],[16,17,"pl-pds"],[22,23,"pl-s"],[22,23,"pl-pds"]],[[0,2,"pl-s"]],[[0,0,"pl-s"]],[[0,26,"pl-s"]],[[0,32,"pl-s"]],[[0,0,"pl-s"]],[[0,2,"pl-s"]],[[0,17,"pl-s"]],[[0,19,"pl-s"]],[[0,2,"pl-s"]],[[0,20,"pl-s"]],[[0,10,"pl-s"]],[[0,19,"pl-s"]],[[0,1,"pl-s"]],[[0,10,"pl-s"]],[[0,0,"pl-s"]],[[0,30,"pl-s"]],[[0,9,"pl-s"]],[[0,15,"pl-s"]],[[0,22,"pl-s"]],[[0,11,"pl-s"]],[[0,19,"pl-s"]],[[0,20,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,14,"pl-s"]],[[0,0,"pl-s"]],[[0,15,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,8,"pl-s"]],[[0,0,"pl-s"]],[[0,29,"pl-s"]],[[0,32,"pl-s"]],[[0,0,"pl-s"]],[[0,27,"pl-s"]],[[0,0,"pl-s"]],[[0,34,"pl-s"]],[[0,25,"pl-s"]],[[0,1,"pl-s"]],[[0,43,"pl-s"]],[[0,43,"pl-s"]],[[0,12,"pl-s"]],[[0,36,"pl-s"]],[[0,11,"pl-s"]],[[0,17,"pl-s"]],[[0,8,"pl-s"]],[[0,58,"pl-s"]],[[0,1,"pl-s"]],[[0,20,"pl-s"]],[[0,0,"pl-s"]],[[0,43,"pl-s"]],[[0,12,"pl-s"]],[[0,36,"pl-s"]],[[0,11,"pl-s"]],[[0,17,"pl-s"]],[[0,8,"pl-s"]],[[0,58,"pl-s"]],[[0,1,"pl-s"]],[[0,0,"pl-s"]],[[0,39,"pl-s"]],[[0,0,"pl-s"]],[[0,24,"pl-s"]],[[0,26,"pl-s"]],[[0,0,"pl-s"]],[[0,24,"pl-s"]],[[0,9,"pl-s"]],[[0,17,"pl-s"]],[[0,1,"pl-s"]],[[0,0,"pl-s"]],[[0,49,"pl-s"],[48,49,"pl-pds"],[51,52,"pl-s"],[51,52,"pl-pds"]],[[0,13,"pl-s"]],[[0,37,"pl-s"]],[[0,10,"pl-s"]],[[0,17,"pl-s"]],[[0,7,"pl-s"]],[[0,31,"pl-s"]],[[0,0,"pl-s"]],[[0,38,"pl-s"]],[[0,29,"pl-s"]],[[0,0,"pl-s"]],[[0,25,"pl-s"]],[[0,13,"pl-s"]],[[0,37,"pl-s"]],[[0,10,"pl-s"]],[[0,17,"pl-s"]],[[0,7,"pl-s"]],[[0,31,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,21,"pl-s"]],[[0,0,"pl-s"]],[[0,21,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,15,"pl-s"]],[[0,0,"pl-s"]],[[0,38,"pl-s"]],[[0,0,"pl-s"]],[[0,25,"pl-s"]],[[0,9,"pl-s"]],[[0,17,"pl-s"]],[[0,13,"pl-s"]],[[0,11,"pl-s"]],[[0,20,"pl-s"]],[[0,4,"pl-s"]],[[0,8,"pl-s"]],[[0,25,"pl-s"]],[[0,9,"pl-s"]],[[0,14,"pl-s"]],[[0,18,"pl-s"]],[[0,11,"pl-s"]],[[0,20,"pl-s"]],[[0,4,"pl-s"]],[[0,0,"pl-s"]],[[0,42,"pl-s"]],[[0,0,"pl-s"]],[[0,25,"pl-s"]],[[0,9,"pl-s"]],[[0,17,"pl-s"]],[[0,13,"pl-s"]],[[0,11,"pl-s"]],[[0,20,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,26,"pl-s"]],[[0,9,"pl-s"]],[[0,14,"pl-s"]],[[0,18,"pl-s"]],[[0,11,"pl-s"]],[[0,20,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,0,"pl-s"]],[[0,25,"pl-s"]],[[0,0,"pl-s"]],[[0,9,"pl-s"]],[[0,49,"pl-s"]],[[0,27,"pl-s"]],[[0,0,"pl-s"]],[[0,32,"pl-s"]],[[0,15,"pl-s"]],[[0,16,"pl-s"]],[[0,1,"pl-s"]],[[0,1,"pl-s"]],[[0,10,"pl-s"]],[[0,58,"pl-s"]],[[0,7,"pl-s"]],[[0,46,"pl-s"]],[[0,16,"pl-s"]],[[0,17,"pl-s"]],[[0,19,"pl-s"]],[[0,39,"pl-s"]],[[0,43,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,9,"pl-s"]],[[0,0,"pl-s"]],[[0,23,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,8,"pl-s"]],[[0,0,"pl-s"]],[[0,44,"pl-s"]],[[0,47,"pl-s"]],[[0,0,"pl-s"]],[[0,23,"pl-s"]],[[0,0,"pl-s"]],[[0,19,"pl-s"]],[[0,10,"pl-s"]],[[0,16,"pl-s"],[15,16,"pl-pds"],[21,22,"pl-s"],[21,22,"pl-pds"]],[[0,1,"pl-s"]],[[0,41,"pl-s"]],[[0,9,"pl-s"]],[[0,9,"pl-s"]],[[0,25,"pl-s"]],[[0,21,"pl-s"]],[[0,11,"pl-s"]],[[0,17,"pl-s"],[16,17,"pl-pds"],[22,23,"pl-s"],[22,23,"pl-pds"]],[[0,17,"pl-s"],[16,17,"pl-pds"],[22,23,"pl-s"],[22,23,"pl-pds"]],[[0,0,"pl-s"]],[[0,0,"pl-s"]],[[0,0,"pl-s"]],[[0,21,"pl-s"]],[[0,13,"pl-s"]],[[0,9,"pl-s"]],[[0,13,"pl-s"]],[[0,35,"pl-s"]],[[0,31,"pl-s"]],[[0,14,"pl-s"]],[[0,18,"pl-s"],[17,18,"pl-pds"],[20,21,"pl-s"],[20,21,"pl-pds"]],[[0,2,"pl-s"]],[[0,0,"pl-s"]],[[0,22,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,18,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,8,"pl-s"]],[[0,0,"pl-s"]],[[0,29,"pl-s"]],[[0,32,"pl-s"]],[[0,0,"pl-s"]],[[0,27,"pl-s"]],[[0,0,"pl-s"]],[[0,34,"pl-s"]],[[0,25,"pl-s"]],[[0,1,"pl-s"]],[[0,31,"pl-s"]],[[0,6,"pl-s"]],[[0,43,"pl-s"]],[[0,12,"pl-s"]],[[0,36,"pl-s"]],[[0,11,"pl-s"]],[[0,17,"pl-s"]],[[0,8,"pl-s"]],[[0,58,"pl-s"]],[[0,1,"pl-s"]],[[0,20,"pl-s"]],[[0,0,"pl-s"]],[[0,43,"pl-s"]],[[0,12,"pl-s"]],[[0,36,"pl-s"]],[[0,11,"pl-s"]],[[0,17,"pl-s"]],[[0,8,"pl-s"]],[[0,58,"pl-s"]],[[0,1,"pl-s"]],[[0,0,"pl-s"]],[[0,39,"pl-s"]],[[0,0,"pl-s"]],[[0,24,"pl-s"]],[[0,26,"pl-s"]],[[0,0,"pl-s"]],[[0,24,"pl-s"]],[[0,9,"pl-s"]],[[0,17,"pl-s"]],[[0,1,"pl-s"]],[[0,0,"pl-s"]],[[0,49,"pl-s"],[48,49,"pl-pds"],[51,52,"pl-s"],[51,52,"pl-pds"]],[[0,13,"pl-s"]],[[0,37,"pl-s"]],[[0,10,"pl-s"]],[[0,17,"pl-s"]],[[0,7,"pl-s"]],[[0,31,"pl-s"]],[[0,0,"pl-s"]],[[0,38,"pl-s"]],[[0,29,"pl-s"]],[[0,0,"pl-s"]],[[0,25,"pl-s"]],[[0,13,"pl-s"]],[[0,37,"pl-s"]],[[0,10,"pl-s"]],[[0,17,"pl-s"]],[[0,7,"pl-s"]],[[0,31,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,0,"pl-s"]],[[0,16,"pl-s"]],[[0,0,"pl-s"]],[[0,45,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,7,"pl-s"]],[[0,44,"pl-s"]],[[0,0,"pl-s"]],[[0,22,"pl-s"]],[[0,10,"pl-s"]],[[0,22,"pl-s"]],[[0,14,"pl-s"]],[[0,19,"pl-s"]],[[0,15,"pl-s"]],[[0,13,"pl-s"]],[[0,23,"pl-s"]],[[0,0,"pl-s"]],[[0,11,"pl-s"]],[[0,28,"pl-s"]],[[0,21,"pl-s"]],[[0,30,"pl-s"]],[[0,48,"pl-s"]],[[0,10,"pl-s"]],[[0,20,"pl-s"]],[[0,24,"pl-s"]],[[0,30,"pl-s"]],[[0,0,"pl-s"]],[[0,15,"pl-s"]],[[0,23,"pl-s"]],[[0,23,"pl-s"]],[[0,0,"pl-s"]],[[0,63,"pl-s"]],[[0,0,"pl-s"]],[[0,14,"pl-s"]],[[0,0,"pl-s"]],[[0,20,"pl-s"]],[[0,19,"pl-s"]],[[0,23,"pl-s"]],[[0,22,"pl-s"]],[[0,2,"pl-s"]],[[0,4,"pl-s"]],[[0,40,"pl-s"]],[[0,50,"pl-s"]],[[0,20,"pl-s"]],[[0,30,"pl-s"]],[[0,21,"pl-s"]],[[0,2,"pl-s"]],[[0,42,"pl-s"]],[[0,0,"pl-s"]],[[0,33,"pl-s"]],[[0,52,"pl-s"]],[[0,19,"pl-s"]],[[0,33,"pl-s"]],[[0,0,"pl-s"]],[[0,22,"pl-s"]],[[0,21,"pl-s"]],[[0,32,"pl-s"]],[[0,20,"pl-s"]],[[0,22,"pl-s"]],[[0,23,"pl-s"]],[[0,18,"pl-s"]],[[0,0,"pl-s"]],[[0,23,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,7,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,0,"pl-s"]],[[0,64,"pl-s"]],[[0,0,"pl-s"]],[[0,46,"pl-s"]],[[0,39,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,7,"pl-s"]],[[0,49,"pl-s"]],[[0,41,"pl-s"],[40,41,"pl-pds"],[48,54,"pl-s"],[48,49,"pl-pds"]],[[0,0,"pl-s"]],[[0,29,"pl-s"]],[[0,49,"pl-s"]],[[0,9,"pl-s"]],[[0,41,"pl-s"],[40,41,"pl-pds"],[48,54,"pl-s"],[48,49,"pl-pds"]],[[0,0,"pl-s"]],[[0,25,"pl-s"]],[[0,49,"pl-s"]],[[0,6,"pl-s"]],[[0,41,"pl-s"],[40,41,"pl-pds"],[48,54,"pl-s"],[48,49,"pl-pds"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,13,"pl-s"]],[[0,0,"pl-s"]],[[0,109,"pl-s"]],[[0,0,"pl-s"]],[[0,7,"pl-s"]],[[0,0,"pl-s"]],[[0,28,"pl-s"]],[[0,0,"pl-s"]],[[0,28,"pl-s"]],[[0,0,"pl-s"]],[[0,101,"pl-s"]],[[0,0,"pl-s"]],[[0,95,"pl-s"]],[[0,29,"pl-s"]],[[0,53,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,6,"pl-s"]],[[0,0,"pl-s"]],[[0,26,"pl-s"]],[[0,21,"pl-s"]],[[0,0,"pl-s"]],[[0,28,"pl-s"]],[[0,0,"pl-s"]],[[0,25,"pl-s"]],[[0,15,"pl-s"]],[[0,31,"pl-s"]],[[0,15,"pl-s"]],[[0,19,"pl-s"]],[[0,0,"pl-s"]],[[0,18,"pl-s"]],[[0,0,"pl-s"]],[[0,0,"pl-s"]],[[0,9,"pl-s"]],[[0,2,"pl-s"]],[[0,11,"pl-s"]],[[0,8,"pl-s"]],[[0,7,"pl-s"]],[[0,8,"pl-s"]],[[0,8,"pl-s"]],[[0,2,"pl-s"]],[[0,18,"pl-s"]],[[0,8,"pl-s"]],[[0,21,"pl-s"]],[[0,27,"pl-s"],[26,27,"pl-pds"],[31,38,"pl-s"],[31,32,"pl-pds"],[37,38,"pl-pds"],[41,49,"pl-s"],[41,42,"pl-pds"],[48,49,"pl-pds"],[53,61,"pl-s"],[53,54,"pl-pds"],[60,61,"pl-pds"],[65,68,"pl-s"],[65,66,"pl-pds"]],[[0,18,"pl-s"]],[[0,10,"pl-s"]],[[0,2,"pl-s"]],[[0,10,"pl-s"]],[[0,7,"pl-s"]],[[0,7,"pl-s"]],[[0,6,"pl-s"]],[[0,0,"pl-s"]],[[0,2,"pl-s"]],[[0,18,"pl-s"]],[[0,8,"pl-s"]],[[0,12,"pl-s"]],[[0,46,"pl-s"]],[[0,19,"pl-s"]],[[0,0,"pl-s"]],[[0,8,"pl-s"]],[[0,41,"pl-s"]],[[0,0,"pl-s"]],[[0,28,"pl-s"]],[[0,15,"pl-s"]],[[0,24,"pl-s"]],[[0,1,"pl-s"]],[[0,9,"pl-s"]],[[0,28,"pl-s"]],[[0,24,"pl-s"]],[[0,21,"pl-s"]],[[0,1,"pl-s"]],[[0,1,"pl-s"]],[[0,30,"pl-s"]],[[0,39,"pl-s"]],[[0,28,"pl-s"]],[[0,25,"pl-s"]],[[0,21,"pl-s"]],[[0,0,"pl-s"]],[[0,27,"pl-s"]],[[0,22,"pl-s"]],[[0,11,"pl-s"]],[[0,24,"pl-s"]],[[0,24,"pl-s"]],[[0,28,"pl-s"]],[[0,1,"pl-s"]],[[0,11,"pl-s"]],[[0,0,"pl-s"]],[[0,24,"pl-s"]],[[0,25,"pl-s"]],[[0,28,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,11,"pl-s"]],[[0,0,"pl-s"]],[[0,8,"pl-s"]],[[0,0,"pl-s"]],[[0,94,"pl-s"]],[[0,0,"pl-s"]],[[0,19,"pl-s"]],[[0,0,"pl-s"]],[[0,34,"pl-s"]],[[0,0,"pl-s"]],[[0,32,"pl-s"]],[[0,0,"pl-s"]],[[0,27,"pl-s"]],[[0,23,"pl-s"]],[[0,12,"pl-s"]],[[0,29,"pl-s"]],[[0,27,"pl-s"]],[[0,36,"pl-s"]],[[0,23,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,7,"pl-s"]],[[0,0,"pl-s"]],[[0,17,"pl-s"]],[[0,16,"pl-s"]],[[0,34,"pl-s"]],[[0,20,"pl-s"]],[[0,20,"pl-s"]],[[0,1,"pl-s"]],[[0,14,"pl-s"]],[[0,15,"pl-s"]],[[0,12,"pl-s"],[11,12,"pl-pds"],[16,20,"pl-s"],[16,17,"pl-pds"],[19,20,"pl-pds"],[25,29,"pl-c1"],[30,33,"pl-c1"],[33,36,"pl-s"],[33,34,"pl-pds"]],[[0,15,"pl-s"]],[[0,12,"pl-s"],[11,12,"pl-pds"],[15,19,"pl-s"],[15,16,"pl-pds"],[18,19,"pl-pds"],[23,27,"pl-c1"],[28,31,"pl-c1"],[31,34,"pl-s"],[31,32,"pl-pds"]],[[0,0,"pl-s"]],[[0,15,"pl-s"]],[[0,12,"pl-s"],[11,12,"pl-pds"],[15,19,"pl-s"],[15,16,"pl-pds"],[18,19,"pl-pds"],[23,27,"pl-c1"],[28,31,"pl-c1"],[31,40,"pl-s"],[31,32,"pl-pds"]],[[0,1,"pl-s"]],[[0,18,"pl-s"]],[[0,0,"pl-s"]],[[0,12,"pl-s"]],[[0,29,"pl-s"]],[[0,15,"pl-s"]],[[0,15,"pl-s"],[14,15,"pl-pds"],[18,22,"pl-s"],[18,19,"pl-pds"],[21,22,"pl-pds"],[26,30,"pl-c1"],[31,34,"pl-c1"],[34,37,"pl-s"],[34,35,"pl-pds"]],[[0,37,"pl-s"]],[[0,16,"pl-s"]],[[0,34,"pl-s"]],[[0,39,"pl-s"]],[[0,20,"pl-s"]],[[0,28,"pl-s"]],[[0,16,"pl-s"]],[[0,11,"pl-s"]],[[0,21,"pl-s"]],[[0,19,"pl-s"]],[[0,37,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,15,"pl-s"]],[[0,12,"pl-s"],[11,12,"pl-pds"],[15,19,"pl-s"],[15,16,"pl-pds"],[18,19,"pl-pds"],[23,27,"pl-c1"],[28,31,"pl-c1"],[31,34,"pl-s"],[31,32,"pl-pds"]],[[0,15,"pl-s"]],[[0,12,"pl-s"],[11,12,"pl-pds"],[16,20,"pl-s"],[16,17,"pl-pds"],[19,20,"pl-pds"],[25,29,"pl-c1"],[30,33,"pl-c1"],[33,36,"pl-s"],[33,34,"pl-pds"]],[[0,15,"pl-s"]],[[0,12,"pl-s"],[11,12,"pl-pds"],[15,19,"pl-s"],[15,16,"pl-pds"],[18,19,"pl-pds"],[22,26,"pl-c1"],[27,30,"pl-c1"],[30,47,"pl-s"],[30,31,"pl-pds"]],[[0,18,"pl-s"]],[[0,0,"pl-s"]],[[0,15,"pl-s"]],[[0,33,"pl-s"]],[[0,31,"pl-s"]],[[0,16,"pl-s"]],[[0,11,"pl-s"]],[[0,33,"pl-s"]],[[0,18,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,16,"pl-s"]],[[0,11,"pl-s"]],[[0,22,"pl-s"]],[[0,19,"pl-s"]],[[0,47,"pl-s"]],[[0,3,"pl-s"]],[[0,1,"pl-s"]],[[0,31,"pl-s"]],[[0,0,"pl-s"]],[[0,30,"pl-s"]],[[0,8,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,16,"pl-s"]],[[0,0,"pl-s"]],[[0,36,"pl-s"]],[[0,0,"pl-s"]],[[0,19,"pl-s"]],[[0,0,"pl-s"]],[[0,14,"pl-s"]],[[0,0,"pl-s"]],[[0,20,"pl-s"]],[[0,0,"pl-s"]],[[0,17,"pl-s"]],[[0,0,"pl-s"]],[[0,40,"pl-s"]],[[0,19,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,12,"pl-s"]],[[0,0,"pl-s"]],[[0,16,"pl-s"]],[[0,37,"pl-s"]],[[0,22,"pl-s"]],[[0,18,"pl-s"]],[[0,3,"pl-s"]],[[0,1,"pl-s"]],[[0,15,"pl-s"]],[[0,12,"pl-s"],[11,12,"pl-pds"],[16,20,"pl-s"],[16,17,"pl-pds"],[19,20,"pl-pds"],[25,29,"pl-c1"],[30,33,"pl-c1"],[33,36,"pl-s"],[33,34,"pl-pds"]],[[0,0,"pl-s"]],[[0,15,"pl-s"]],[[0,12,"pl-s"],[11,12,"pl-pds"],[15,19,"pl-s"],[15,16,"pl-pds"],[18,19,"pl-pds"],[23,27,"pl-c1"],[28,31,"pl-c1"],[31,34,"pl-s"],[31,32,"pl-pds"]],[[0,1,"pl-s"]],[[0,13,"pl-s"]],[[0,44,"pl-s"]],[[0,50,"pl-s"]],[[0,15,"pl-s"]],[[0,15,"pl-s"],[14,15,"pl-pds"],[18,22,"pl-s"],[18,19,"pl-pds"],[21,22,"pl-pds"],[26,30,"pl-c1"],[31,34,"pl-c1"],[34,37,"pl-s"],[34,35,"pl-pds"]],[[0,18,"pl-s"]],[[0,22,"pl-s"]],[[0,0,"pl-s"]],[[0,16,"pl-s"]],[[0,37,"pl-s"]],[[0,44,"pl-s"]],[[0,18,"pl-s"]],[[0,3,"pl-s"]],[[0,8,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,19,"pl-s"]],[[0,0,"pl-s"]],[[0,16,"pl-s"]],[[0,0,"pl-s"]],[[0,36,"pl-s"]],[[0,46,"pl-s"]],[[0,0,"pl-s"]],[[0,101,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,7,"pl-s"]],[[0,0,"pl-s"]],[[0,17,"pl-s"]],[[0,23,"pl-s"]],[[0,29,"pl-s"]],[[0,41,"pl-s"],[37,38,"pl-pds"],[38,39,"pl-pds"]],[[0,0,"pl-s"]],[[0,15,"pl-s"]],[[0,21,"pl-s"]],[[0,29,"pl-s"]],[[0,40,"pl-s"],[37,38,"pl-pds"],[38,39,"pl-pds"]],[[0,28,"pl-s"]],[[0,12,"pl-s"]],[[0,48,"pl-s"]],[[0,7,"pl-s"]],[[0,21,"pl-s"]],[[0,14,"pl-s"],[13,14,"pl-pds"],[18,29,"pl-s"],[18,19,"pl-pds"],[28,29,"pl-pds"],[32,35,"pl-s"],[32,33,"pl-pds"]],[[0,21,"pl-s"]],[[0,14,"pl-s"],[13,14,"pl-pds"],[17,20,"pl-s"],[17,18,"pl-pds"]],[[0,1,"pl-s"]],[[0,23,"pl-s"]],[[0,19,"pl-s"]],[[0,12,"pl-s"],[11,12,"pl-pds"],[15,23,"pl-s"],[15,16,"pl-pds"]],[[0,19,"pl-s"]],[[0,12,"pl-s"],[11,12,"pl-pds"],[16,24,"pl-s"],[16,17,"pl-pds"]],[[0,19,"pl-s"]],[[0,12,"pl-s"],[11,12,"pl-pds"],[15,23,"pl-s"],[15,16,"pl-pds"]],[[0,19,"pl-s"]],[[0,12,"pl-s"],[11,12,"pl-pds"],[16,46,"pl-s"],[16,17,"pl-pds"]],[[0,0,"pl-s"]],[[0,19,"pl-s"]],[[0,12,"pl-s"],[11,12,"pl-pds"],[16,48,"pl-s"],[16,17,"pl-pds"]],[[0,23,"pl-s"]],[[0,0,"pl-s"]],[[0,23,"pl-s"]],[[0,20,"pl-s"]],[[0,17,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,9,"pl-s"]],[[0,0,"pl-s"]],[[0,80,"pl-s"],[48,50,"pl-cce"],[65,67,"pl-cce"]],[[0,0,"pl-s"]],[[0,68,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,13,"pl-s"]],[[0,36,"pl-s"]],[[0,6,"pl-s"]],[[0,38,"pl-s"]],[[0,0,"pl-s"]],[[0,5,"pl-s"]],[[0,18,"pl-s"]],[[0,20,"pl-s"]],[[0,21,"pl-s"]],[[0,31,"pl-s"],[30,31,"pl-pds"],[34,37,"pl-s"],[34,35,"pl-pds"],[36,37,"pl-pds"],[42,46,"pl-s"],[42,43,"pl-pds"]],[[0,46,"pl-s"]],[[0,3,"pl-s"]],[[0,1,"pl-s"]],[[0,7,"pl-s"]],[[0,16,"pl-s"]],[[0,12,"pl-s"],[11,12,"pl-pds"],[16,20,"pl-s"],[16,17,"pl-pds"],[19,20,"pl-pds"],[23,29,"pl-s"],[23,24,"pl-pds"]],[[0,18,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,15,"pl-s"]],[[0,0,"pl-s"]],[[0,101,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,12,"pl-s"]],[[0,0,"pl-s"]],[[0,24,"pl-s"]],[[0,0,"pl-s"]],[[0,41,"pl-s"]],[[0,75,"pl-s"]],[[0,71,"pl-s"]],[[0,65,"pl-s"]],[[0,26,"pl-s"]],[[0,14,"pl-s"]],[[0,17,"pl-s"]],[[0,14,"pl-s"]],[[0,27,"pl-s"]],[[0,42,"pl-s"]],[[0,0,"pl-s"]],[[0,10,"pl-s"]],[[0,20,"pl-s"]],[[0,26,"pl-s"]],[[0,44,"pl-s"],[41,42,"pl-pds"],[42,43,"pl-pds"]],[[0,44,"pl-s"]],[[0,52,"pl-s"]],[[0,33,"pl-s"]],[[0,43,"pl-s"],[39,40,"pl-pds"],[40,41,"pl-pds"]],[[0,1,"pl-s"]],[[0,59,"pl-s"]],[[0,15,"pl-s"]],[[0,22,"pl-s"]],[[0,44,"pl-s"]],[[0,40,"pl-s"],[37,38,"pl-pds"],[38,39,"pl-pds"]],[[0,41,"pl-s"],[38,39,"pl-pds"],[39,40,"pl-pds"]],[[0,35,"pl-s"]],[[0,11,"pl-s"],[10,11,"pl-pds"],[12,15,"pl-s"],[12,13,"pl-pds"],[14,15,"pl-pds"],[16,50,"pl-s"],[16,17,"pl-pds"]],[[0,20,"pl-s"]],[[0,1,"pl-s"]],[[0,55,"pl-s"]],[[0,13,"pl-s"]],[[0,22,"pl-s"]],[[0,35,"pl-s"]],[[0,51,"pl-s"],[38,39,"pl-pds"],[39,40,"pl-pds"]],[[0,44,"pl-s"]],[[0,29,"pl-s"]],[[0,60,"pl-s"]],[[0,52,"pl-s"]],[[0,11,"pl-s"]],[[0,14,"pl-s"]],[[0,14,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,0,"pl-s"]],[[0,11,"pl-s"]],[[0,0,"pl-s"]],[[0,50,"pl-s"]],[[0,0,"pl-s"]],[[0,101,"pl-s"]],[[0,0,"pl-s"]],[[0,11,"pl-s"]],[[0,0,"pl-s"]],[[0,28,"pl-s"]],[[0,29,"pl-s"]],[[0,36,"pl-s"]],[[0,64,"pl-s"]],[[0,82,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,11,"pl-s"]],[[0,6,"pl-s"]],[[0,16,"pl-s"]],[[0,36,"pl-s"]],[[0,39,"pl-s"],[36,37,"pl-pds"],[37,38,"pl-pds"]],[[0,42,"pl-s"],[37,38,"pl-pds"],[38,39,"pl-pds"]],[[0,8,"pl-s"]],[[0,11,"pl-s"]],[[0,15,"pl-s"]],[[0,15,"pl-s"],[14,15,"pl-pds"],[19,21,"pl-c1"],[22,25,"pl-c1"],[25,29,"pl-s"],[25,26,"pl-pds"],[28,29,"pl-pds"],[32,54,"pl-s"],[32,33,"pl-pds"]],[[0,0,"pl-s"]],[[0,15,"pl-s"]],[[0,25,"pl-s"],[24,25,"pl-pds"],[29,33,"pl-c1"],[34,37,"pl-c1"],[37,41,"pl-s"],[37,38,"pl-pds"],[40,41,"pl-pds"],[44,47,"pl-s"],[44,45,"pl-pds"]],[[0,0,"pl-s"]],[[0,18,"pl-s"]],[[0,0,"pl-s"]],[[0,14,"pl-s"]],[[0,36,"pl-s"]],[[0,16,"pl-s"]],[[0,36,"pl-s"]],[[0,39,"pl-s"],[36,37,"pl-pds"],[37,38,"pl-pds"]],[[0,42,"pl-s"],[37,38,"pl-pds"],[38,39,"pl-pds"]],[[0,15,"pl-s"]],[[0,15,"pl-s"],[14,15,"pl-pds"],[20,22,"pl-c1"],[23,26,"pl-c1"],[26,30,"pl-s"],[26,27,"pl-pds"],[29,30,"pl-pds"],[34,37,"pl-s"],[34,35,"pl-pds"]],[[0,15,"pl-s"]],[[0,14,"pl-s"],[13,14,"pl-pds"],[18,20,"pl-c1"],[21,24,"pl-c1"],[24,28,"pl-s"],[24,25,"pl-pds"],[27,28,"pl-pds"],[31,34,"pl-s"],[31,32,"pl-pds"]],[[0,18,"pl-s"]],[[0,0,"pl-s"]],[[0,20,"pl-s"]],[[0,26,"pl-s"]],[[0,49,"pl-s"]],[[0,40,"pl-s"]],[[0,35,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,9,"pl-s"]],[[0,16,"pl-s"]],[[0,55,"pl-s"]],[[0,45,"pl-s"]],[[0,41,"pl-s"]],[[0,50,"pl-s"]],[[0,31,"pl-s"]],[[0,33,"pl-s"]],[[0,33,"pl-s"]],[[0,53,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,21,"pl-s"]],[[0,1,"pl-s"]],[[0,44,"pl-s"]],[[0,30,"pl-s"]],[[0,29,"pl-s"]],[[0,2,"pl-s"]],[[0,0,"pl-s"]],[[0,5,"pl-s"]],[[0,41,"pl-s"]],[[0,42,"pl-s"]],[[0,42,"pl-s"]],[[0,42,"pl-s"]],[[0,43,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,11,"pl-s"]],[[0,0,"pl-s"]],[[0,10,"pl-s"]],[[0,0,"pl-s"]],[[0,58,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,56,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,14,"pl-s"]],[[0,20,"pl-s"]],[[0,0,"pl-s"]],[[0,26,"pl-s"]],[[0,49,"pl-s"]],[[0,40,"pl-s"]],[[0,35,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,9,"pl-s"]],[[0,16,"pl-s"]],[[0,55,"pl-s"]],[[0,45,"pl-s"]],[[0,41,"pl-s"]],[[0,50,"pl-s"]],[[0,31,"pl-s"]],[[0,33,"pl-s"]],[[0,33,"pl-s"]],[[0,53,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,21,"pl-s"]],[[0,1,"pl-s"]],[[0,44,"pl-s"]],[[0,30,"pl-s"]],[[0,29,"pl-s"]],[[0,2,"pl-s"]],[[0,0,"pl-s"]],[[0,5,"pl-s"]],[[0,41,"pl-s"]],[[0,42,"pl-s"]],[[0,42,"pl-s"]],[[0,42,"pl-s"]],[[0,42,"pl-s"]],[[0,0,"pl-s"]],[[0,12,"pl-s"]],[[0,0,"pl-s"]],[[0,38,"pl-s"]],[[0,34,"pl-s"]],[[0,33,"pl-s"]],[[0,5,"pl-s"]],[[0,36,"pl-s"]],[[0,22,"pl-s"],[21,22,"pl-pds"],[74,75,"pl-s"],[74,75,"pl-pds"]],[[0,39,"pl-s"]],[[0,4,"pl-s"],[3,4,"pl-pds"],[56,59,"pl-s"],[56,57,"pl-pds"]],[[0,44,"pl-s"],[41,42,"pl-pds"],[42,43,"pl-pds"]],[[0,26,"pl-s"]],[[0,15,"pl-s"]],[[0,29,"pl-s"]],[[0,80,"pl-s"]],[[0,17,"pl-s"]],[[0,13,"pl-s"]],[[0,20,"pl-s"]],[[0,8,"pl-s"]],[[0,0,"pl-s"]],[[0,0,"pl-s"]],[[0,25,"pl-s"]],[[0,27,"pl-s"]],[[0,14,"pl-s"]],[[0,5,"pl-s"]],[[0,24,"pl-s"]],[[0,29,"pl-s"]],[[0,9,"pl-s"]],[[0,6,"pl-s"]],[[0,0,"pl-s"]],[[0,18,"pl-s"]],[[0,64,"pl-s"]],[[0,5,"pl-s"]],[[0,24,"pl-s"]],[[0,34,"pl-s"]],[[0,27,"pl-s"]],[[0,32,"pl-s"]],[[0,7,"pl-s"]],[[0,15,"pl-s"]],[[0,32,"pl-s"]],[[0,52,"pl-s"],[51,52,"pl-pds"],[60,98,"pl-s"],[60,61,"pl-pds"]],[[0,19,"pl-s"]],[[0,12,"pl-s"]],[[0,24,"pl-s"]],[[0,10,"pl-s"]],[[0,7,"pl-s"]],[[0,0,"pl-s"]],[[0,13,"pl-s"]],[[0,33,"pl-s"]],[[0,0,"pl-s"]],[[0,14,"pl-s"]],[[0,11,"pl-s"]],[[0,0,"pl-s"]],[[0,25,"pl-s"]],[[0,0,"pl-s"]],[[0,21,"pl-s"]],[[0,9,"pl-s"]],[[0,10,"pl-s"]],[[0,23,"pl-s"]],[[0,20,"pl-s"]],[[0,0,"pl-s"]],[[0,33,"pl-s"]],[[0,42,"pl-s"]],[[0,33,"pl-s"]],[[0,0,"pl-s"]],[[0,20,"pl-s"]],[[0,40,"pl-s"]],[[0,39,"pl-s"]],[[0,0,"pl-s"]],[[0,17,"pl-s"]],[[0,0,"pl-s"]],[[0,9,"pl-s"]],[[0,10,"pl-s"]],[[0,40,"pl-s"]],[[0,0,"pl-s"]],[[0,0,"pl-s"]],[[0,21,"pl-s"]],[[0,9,"pl-s"]],[[0,10,"pl-s"]],[[0,16,"pl-s"],[15,16,"pl-pds"],[22,47,"pl-s"],[22,23,"pl-pds"]],[[0,0,"pl-s"]],[[0,54,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,9,"pl-s"]],[[0,0,"pl-s"]],[[0,17,"pl-s"]],[[0,0,"pl-s"]],[[0,37,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,60,"pl-s"]],[[0,0,"pl-s"]],[[0,8,"pl-s"]],[[0,0,"pl-s"]],[[0,33,"pl-s"]],[[0,15,"pl-s"]],[[0,14,"pl-s"]],[[0,28,"pl-s"]],[[0,0,"pl-s"]],[[0,63,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,16,"pl-s"]],[[0,40,"pl-s"]],[[0,22,"pl-s"]],[[0,16,"pl-s"]],[[0,43,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,8,"pl-s"]],[[0,0,"pl-s"]],[[0,25,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,87,"pl-s"]],[[0,65,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,11,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,38,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,34,"pl-s"]],[[0,45,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,14,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,33,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,12,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,31,"pl-s"]],[[0,26,"pl-s"]],[[0,16,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,16,"pl-s"]],[[0,7,"pl-s"]],[[0,18,"pl-s"]],[[0,9,"pl-s"]],[[0,21,"pl-s"]],[[0,1,"pl-s"]],[[0,11,"pl-s"]],[[0,22,"pl-s"]],[[0,7,"pl-s"]],[[0,10,"pl-s"]],[[0,41,"pl-s"]],[[0,12,"pl-s"]],[[0,34,"pl-s"]],[[0,8,"pl-s"]],[[0,45,"pl-s"]],[[0,12,"pl-s"]],[[0,39,"pl-s"]],[[0,0,"pl-s"]],[[0,9,"pl-s"]],[[0,18,"pl-s"]],[[0,9,"pl-s"]],[[0,21,"pl-s"]],[[0,36,"pl-s"]],[[0,0,"pl-s"]],[[0,19,"pl-s"]],[[0,0,"pl-s"]],[[0,7,"pl-s"]],[[0,26,"pl-s"]],[[0,9,"pl-s"]],[[0,32,"pl-s"]],[[0,0,"pl-s"]],[[0,0,"pl-s"]],[[0,20,"pl-s"]],[[0,0,"pl-s"]],[[0,7,"pl-s"]],[[0,8,"pl-s"]],[[0,19,"pl-s"]],[[0,8,"pl-s"]],[[0,21,"pl-s"]],[[0,8,"pl-s"]],[[0,18,"pl-s"]],[[0,7,"pl-s"]],[[0,8,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,14,"pl-s"]],[[0,0,"pl-s"]],[[0,21,"pl-s"]],[[0,0,"pl-s"]],[[0,9,"pl-s"]],[[0,36,"pl-s"]],[[0,6,"pl-s"]],[[0,0,"pl-s"]],[[0,31,"pl-s"]],[[0,0,"pl-s"]],[[0,9,"pl-s"]],[[0,35,"pl-s"]],[[0,6,"pl-s"]],[[0,0,"pl-s"]],[[0,19,"pl-s"]],[[0,0,"pl-s"]],[[0,9,"pl-s"]],[[0,40,"pl-s"]],[[0,6,"pl-s"]],[[0,0,"pl-s"]],[[0,24,"pl-s"]],[[0,0,"pl-s"]],[[0,11,"pl-s"]],[[0,0,"pl-s"]],[[0,9,"pl-s"]],[[0,0,"pl-s"]],[[0,87,"pl-s"]],[[0,0,"pl-s"]],[[0,4,"pl-s"]],[[0,0,"pl-s"]],[[0,101,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,18,"pl-s"]],[[0,5,"pl-s"]],[[0,13,"pl-s"]],[[0,16,"pl-s"]],[[0,10,"pl-s"]],[[0,23,"pl-s"]],[[0,10,"pl-s"]],[[0,18,"pl-s"]],[[0,11,"pl-s"]],[[0,11,"pl-s"]],[[0,11,"pl-s"]],[[0,29,"pl-s"],[28,29,"pl-pds"],[32,35,"pl-s"],[32,33,"pl-pds"]],[[0,18,"pl-s"]],[[0,0,"pl-s"]],[[0,11,"pl-s"]],[[0,10,"pl-s"]],[[0,29,"pl-s"],[28,29,"pl-pds"],[33,36,"pl-s"],[33,34,"pl-pds"]],[[0,0,"pl-s"]],[[0,8,"pl-s"]],[[0,13,"pl-s"]],[[0,9,"pl-s"]],[[0,13,"pl-s"]],[[0,24,"pl-s"]],[[0,9,"pl-s"]],[[0,6,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,8,"pl-s"]],[[0,0,"pl-s"]],[[0,55,"pl-s"]],[[0,0,"pl-s"]],[[0,20,"pl-s"]],[[0,0,"pl-s"]],[[0,31,"pl-s"]],[[0,26,"pl-s"]],[[0,27,"pl-s"]],[[0,22,"pl-s"]],[[0,32,"pl-s"]],[[0,0,"pl-s"]],[[0,8,"pl-s"]],[[0,0,"pl-s"]],[[0,107,"pl-s"]],[[0,0,"pl-s"]],[[0,8,"pl-s"]],[[0,0,"pl-s"]],[[0,119,"pl-s"]],[[0,0,"pl-s"]],[[0,10,"pl-s"]],[[0,0,"pl-s"]],[[0,34,"pl-s"]],[[0,52,"pl-s"]],[[0,43,"pl-s"]],[[0,29,"pl-s"]],[[0,26,"pl-s"]],[[0,46,"pl-s"]],[[0,52,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,10,"pl-s"]],[[0,36,"pl-s"]],[[0,29,"pl-s"],[28,29,"pl-pds"],[34,52,"pl-s"],[34,35,"pl-pds"]],[[0,0,"pl-s"]],[[0,17,"pl-s"]],[[0,0,"pl-s"]],[[0,40,"pl-s"]],[[0,18,"pl-s"]],[[0,18,"pl-s"]],[[0,29,"pl-s"],[28,29,"pl-pds"],[33,36,"pl-s"],[33,34,"pl-pds"]],[[0,29,"pl-s"],[28,29,"pl-pds"],[34,37,"pl-s"],[34,35,"pl-pds"]],[[0,27,"pl-s"]],[[0,7,"pl-s"]],[[0,0,"pl-s"]],[[0,57,"pl-s"]],[[0,26,"pl-s"]],[[0,0,"pl-s"]],[[0,28,"pl-s"]],[[0,34,"pl-s"]],[[0,57,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,15,"pl-s"]],[[0,0,"pl-s"]],[[0,12,"pl-s"]],[[0,0,"pl-s"]],[[0,78,"pl-s"]],[[0,0,"pl-s"]],[[0,22,"pl-s"]],[[0,0,"pl-s"]],[[0,4,"pl-s"]],[[0,7,"pl-s"]],[[0,4,"pl-s"]],[[0,0,"pl-s"]],[[0,12,"pl-s"]],[[0,0,"pl-s"]],[[0,74,"pl-s"]],[[0,90,"pl-s"]],[[0,77,"pl-s"]],[[0,0,"pl-s"]],[[0,10,"pl-s"]],[[0,0,"pl-s"]],[[0,29,"pl-s"]],[[0,0,"pl-s"]],[[0,51,"pl-s"]],[[0,0,"pl-s"]],[[0,101,"pl-s"]],[[0,0,"pl-s"]],[[0,20,"pl-s"]],[[0,0,"pl-s"]],[[0,101,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,17,"pl-s"]],[[0,0,"pl-s"]],[[0,19,"pl-s"]],[[0,20,"pl-s"]],[[0,22,"pl-s"]],[[0,0,"pl-s"]],[[0,32,"pl-s"]],[[0,22,"pl-s"]],[[0,22,"pl-s"]],[[0,22,"pl-s"]],[[0,22,"pl-s"]],[[0,22,"pl-s"]],[[0,0,"pl-s"]],[[0,37,"pl-s"]],[[0,0,"pl-s"]],[[0,56,"pl-s"]],[[0,0,"pl-s"]],[[0,9,"pl-s"]],[[0,23,"pl-s"]],[[0,8,"pl-s"]],[[0,20,"pl-s"]],[[0,12,"pl-s"]],[[0,1,"pl-s"]],[[0,0,"pl-s"]],[[0,14,"pl-s"]],[[0,21,"pl-s"]],[[0,13,"pl-s"]],[[0,28,"pl-s"]],[[0,13,"pl-s"]],[[0,56,"pl-s"]],[[0,13,"pl-s"]],[[0,47,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,12,"pl-s"]],[[0,0,"pl-s"]],[[0,13,"pl-s"]],[[0,0,"pl-s"]],[[0,9,"pl-s"]],[[0,25,"pl-s"]],[[0,6,"pl-s"]],[[0,0,"pl-s"]],[[0,13,"pl-s"]],[[0,0,"pl-s"]],[[0,9,"pl-s"]],[[0,32,"pl-s"]],[[0,6,"pl-s"]],[[0,0,"pl-s"]],[[0,13,"pl-s"]],[[0,0,"pl-s"]],[[0,9,"pl-s"]],[[0,59,"pl-s"]],[[0,6,"pl-s"]],[[0,0,"pl-s"]],[[0,13,"pl-s"]],[[0,0,"pl-s"]],[[0,9,"pl-s"]],[[0,58,"pl-s"]],[[0,6,"pl-s"]],[[0,0,"pl-s"]],[[0,47,"pl-s"]],[[0,31,"pl-s"]],[[0,0,"pl-s"]],[[0,40,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,70,"pl-s"]],[[0,8,"pl-s"]],[[0,39,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,15,"pl-s"]],[[0,0,"pl-s"]],[[0,14,"pl-s"]],[[0,0,"pl-s"]],[[0,17,"pl-s"]],[[0,42,"pl-s"]],[[0,19,"pl-s"]],[[0,31,"pl-s"]],[[0,17,"pl-s"]],[[0,68,"pl-s"]],[[0,18,"pl-s"]],[[0,60,"pl-s"]],[[0,0,"pl-s"]],[[0,17,"pl-s"]],[[0,0,"pl-s"]],[[0,8,"pl-s"]],[[0,0,"pl-s"]],[[0,67,"pl-s"]],[[0,0,"pl-s"]],[[0,45,"pl-s"]],[[0,26,"pl-s"]],[[0,11,"pl-s"]],[[0,49,"pl-s"]],[[0,68,"pl-s"]],[[0,0,"pl-s"]],[[0,101,"pl-s"]],[[0,0,"pl-s"]],[[0,17,"pl-s"]],[[0,0,"pl-s"]],[[0,101,"pl-s"]],[[0,0,"pl-s"]],[[0,8,"pl-s"]],[[0,0,"pl-s"]],[[0,28,"pl-s"]],[[0,0,"pl-s"]],[[0,40,"pl-s"]],[[0,40,"pl-s"]],[[0,47,"pl-s"]],[[0,42,"pl-s"]],[[0,87,"pl-s"]],[[0,0,"pl-s"]],[[0,15,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,11,"pl-s"]],[[0,0,"pl-s"]],[[0,12,"pl-s"]],[[0,12,"pl-s"]],[[0,22,"pl-s"]],[[0,27,"pl-s"]],[[0,0,"pl-s"]],[[0,14,"pl-s"]],[[0,18,"pl-s"]],[[0,8,"pl-s"]],[[0,34,"pl-s"]],[[0,32,"pl-s"]],[[0,0,"pl-s"]],[[0,18,"pl-s"]],[[0,12,"pl-s"]],[[0,27,"pl-s"],[26,27,"pl-pds"],[31,34,"pl-s"],[31,32,"pl-pds"]],[[0,18,"pl-s"]],[[0,14,"pl-s"]],[[0,0,"pl-s"]],[[0,14,"pl-s"]],[[0,41,"pl-s"]],[[0,37,"pl-s"]],[[0,0,"pl-s"]],[[0,18,"pl-s"]],[[0,8,"pl-s"]],[[0,34,"pl-s"]],[[0,17,"pl-s"]],[[0,15,"pl-s"]],[[0,11,"pl-s"],[10,11,"pl-pds"],[14,22,"pl-s"],[14,15,"pl-pds"],[21,22,"pl-pds"],[26,35,"pl-s"],[26,27,"pl-pds"],[34,35,"pl-pds"],[38,41,"pl-s"],[38,39,"pl-pds"]],[[0,17,"pl-s"]],[[0,0,"pl-s"]],[[0,11,"pl-s"]],[[0,33,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,14,"pl-s"]],[[0,0,"pl-s"]],[[0,38,"pl-s"]],[[0,12,"pl-s"]],[[0,21,"pl-s"]],[[0,0,"pl-s"]],[[0,88,"pl-s"]],[[0,0,"pl-s"]],[[0,101,"pl-s"]],[[0,0,"pl-s"]],[[0,10,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,31,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,11,"pl-s"]],[[0,0,"pl-s"]],[[0,9,"pl-s"]],[[0,0,"pl-s"]],[[0,107,"pl-s"]],[[0,0,"pl-s"]],[[0,8,"pl-s"]],[[0,0,"pl-s"]],[[0,54,"pl-s"]],[[0,0,"pl-s"]],[[0,15,"pl-s"]],[[0,0,"pl-s"]],[[0,104,"pl-s"]],[[0,0,"pl-s"]],[[0,11,"pl-s"]],[[0,0,"pl-s"]],[[0,30,"pl-s"]],[[0,39,"pl-s"]],[[0,23,"pl-s"]],[[0,22,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,8,"pl-s"]],[[0,60,"pl-s"]],[[0,0,"pl-s"]],[[0,7,"pl-s"]],[[0,22,"pl-s"]],[[0,3,"pl-s"]],[[0,44,"pl-s"]],[[0,0,"pl-s"]],[[0,7,"pl-s"]],[[0,15,"pl-s"]],[[0,0,"pl-s"]],[[0,25,"pl-s"]],[[0,35,"pl-s"]],[[0,0,"pl-s"]],[[0,12,"pl-s"]],[[0,27,"pl-s"]],[[0,7,"pl-s"]],[[0,21,"pl-s"]],[[0,0,"pl-s"]],[[0,0,"pl-s"]],[[0,8,"pl-s"]],[[0,0,"pl-s"]],[[0,47,"pl-s"]],[[0,57,"pl-s"]],[[0,0,"pl-s"]],[[0,14,"pl-s"]],[[0,0,"pl-s"]],[[0,18,"pl-s"]],[[0,12,"pl-s"],[11,12,"pl-pds"],[19,21,"pl-s"],[19,20,"pl-pds"]],[[0,19,"pl-s"]],[[0,1,"pl-s"]],[[0,26,"pl-s"]],[[0,0,"pl-s"]],[[0,0,"pl-s"]],[[0,24,"pl-s"]],[[0,0,"pl-s"]],[[0,16,"pl-s"]],[[0,0,"pl-s"]],[[0,11,"pl-s"]],[[0,12,"pl-s"],[11,12,"pl-pds"],[20,22,"pl-s"],[20,21,"pl-pds"]],[[0,19,"pl-s"]],[[0,0,"pl-s"]],[[0,56,"pl-s"]],[[0,15,"pl-s"]],[[0,0,"pl-s"]],[[0,22,"pl-s"]],[[0,3,"pl-s"]],[[0,36,"pl-s"]],[[0,1,"pl-s"]],[[0,24,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,10,"pl-s"]],[[0,0,"pl-s"]],[[0,42,"pl-s"]],[[0,54,"pl-s"]],[[0,23,"pl-s"]],[[0,0,"pl-s"]],[[0,10,"pl-s"]],[[0,0,"pl-s"]],[[0,93,"pl-s"]],[[0,123,"pl-s"]],[[0,113,"pl-s"]],[[0,0,"pl-s"]],[[0,10,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,10,"pl-s"]],[[0,50,"pl-s"]],[[0,43,"pl-s"]],[[0,2,"pl-s"]],[[0,18,"pl-s"]],[[0,13,"pl-s"]],[[0,2,"pl-s"]],[[0,22,"pl-s"]],[[0,3,"pl-s"]],[[0,34,"pl-s"]],[[0,25,"pl-s"]],[[0,36,"pl-s"]],[[0,31,"pl-s"]],[[0,0,"pl-s"]],[[0,15,"pl-s"]],[[0,24,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,11,"pl-s"]],[[0,0,"pl-s"]],[[0,12,"pl-s"]],[[0,0,"pl-s"]],[[0,34,"pl-s"]],[[0,0,"pl-s"]],[[0,101,"pl-s"]],[[0,0,"pl-s"]],[[0,15,"pl-s"]],[[0,67,"pl-s"]],[[0,12,"pl-s"]],[[0,53,"pl-s"]],[[0,4,"pl-s"]],[[0,0,"pl-s"]],[[0,8,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,13,"pl-s"],[12,13,"pl-pds"],[16,19,"pl-s"],[16,17,"pl-pds"],[18,19,"pl-pds"],[25,42,"pl-s"],[25,26,"pl-pds"],[41,42,"pl-pds"],[44,45,"pl-s"],[44,45,"pl-pds"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,14,"pl-s"]],[[0,0,"pl-s"]],[[0,8,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,11,"pl-s"],[10,11,"pl-pds"],[14,17,"pl-s"],[14,15,"pl-pds"],[16,17,"pl-pds"],[23,25,"pl-s"],[23,24,"pl-pds"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,10,"pl-s"]],[[0,0,"pl-s"]],[[0,8,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,25,"pl-s"],[24,25,"pl-pds"],[27,30,"pl-s"],[27,28,"pl-pds"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,21,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,18,"pl-s"],[17,18,"pl-pds"],[21,24,"pl-s"],[21,22,"pl-pds"],[23,24,"pl-pds"],[28,40,"pl-s"],[28,29,"pl-pds"],[39,40,"pl-pds"],[42,45,"pl-s"],[42,43,"pl-pds"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,14,"pl-s"]],[[0,0,"pl-s"]],[[0,101,"pl-s"]],[[0,0,"pl-s"]],[[0,9,"pl-s"]],[[0,0,"pl-s"]],[[0,5,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,24,"pl-s"],[23,24,"pl-pds"],[27,30,"pl-s"],[27,28,"pl-pds"],[29,30,"pl-pds"],[34,52,"pl-s"],[34,35,"pl-pds"],[51,52,"pl-pds"],[54,56,"pl-s"],[54,55,"pl-pds"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,17,"pl-s"]],[[0,0,"pl-s"]],[[0,24,"pl-s"]],[[0,0,"pl-s"]],[[0,39,"pl-s"]],[[0,0,"pl-s"]],[[0,53,"pl-s"]],[[0,0,"pl-s"]],[[0,7,"pl-s"]],[[0,37,"pl-s"]],[[0,0,"pl-s"]],[[0,36,"pl-s"]],[[0,0,"pl-s"]],[[0,27,"pl-s"]],[[0,0,"pl-s"]],[[0,26,"pl-s"]],[[0,0,"pl-s"]],[[0,23,"pl-s"]],[[0,0,"pl-s"]],[[0,10,"pl-s"]],[[0,0,"pl-s"]],[[0,5,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,27,"pl-s"],[26,27,"pl-pds"],[30,33,"pl-s"],[30,31,"pl-pds"],[32,33,"pl-pds"],[37,39,"pl-s"],[37,38,"pl-pds"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,10,"pl-s"]],[[0,0,"pl-s"]],[[0,23,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,17,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,13,"pl-s"]],[[0,43,"pl-s"]],[[0,51,"pl-s"]],[[0,0,"pl-s"]],[[0,12,"pl-s"]],[[0,11,"pl-s"],[10,11,"pl-pds"],[18,21,"pl-s"],[18,19,"pl-pds"],[20,21,"pl-pds"],[30,43,"pl-s"],[30,31,"pl-pds"],[42,43,"pl-pds"],[50,57,"pl-s"],[50,51,"pl-pds"],[56,57,"pl-pds"],[66,73,"pl-s"],[66,67,"pl-pds"]],[[0,51,"pl-s"],[50,51,"pl-pds"],[51,57,"pl-c1"],[57,66,"pl-s"],[57,58,"pl-pds"]],[[0,48,"pl-s"]],[[0,13,"pl-s"],[12,13,"pl-pds"],[20,23,"pl-s"],[20,21,"pl-pds"],[22,23,"pl-pds"],[32,49,"pl-s"],[32,33,"pl-pds"],[48,49,"pl-pds"],[49,55,"pl-c1"],[55,56,"pl-s"],[55,56,"pl-pds"]],[[0,0,"pl-s"]],[[0,46,"pl-s"]],[[0,16,"pl-s"]],[[0,0,"pl-s"]],[[0,10,"pl-s"]],[[0,11,"pl-s"],[10,11,"pl-pds"],[18,21,"pl-s"],[18,19,"pl-pds"],[20,21,"pl-pds"],[30,31,"pl-s"],[30,31,"pl-pds"]],[[0,0,"pl-s"]],[[0,8,"pl-s"]],[[0,0,"pl-s"]],[[0,41,"pl-s"]],[[0,18,"pl-s"],[17,18,"pl-pds"],[25,28,"pl-s"],[25,26,"pl-pds"],[27,28,"pl-pds"],[37,51,"pl-s"],[37,38,"pl-pds"],[50,51,"pl-pds"],[51,57,"pl-c1"],[57,59,"pl-s"],[57,58,"pl-pds"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,9,"pl-s"]],[[0,0,"pl-s"]],[[0,7,"pl-s"]],[[0,0,"pl-s"]],[[0,47,"pl-s"]],[[0,35,"pl-s"]],[[0,23,"pl-s"]],[[0,18,"pl-s"]],[[0,26,"pl-s"]],[[0,7,"pl-s"]],[[0,18,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,13,"pl-s"]],[[0,0,"pl-s"]],[[0,32,"pl-s"]],[[0,13,"pl-s"],[12,13,"pl-pds"],[21,24,"pl-s"],[21,22,"pl-pds"],[23,24,"pl-pds"],[33,50,"pl-s"],[33,34,"pl-pds"],[49,50,"pl-pds"],[50,53,"pl-c1"],[53,54,"pl-s"],[53,54,"pl-pds"]],[[0,0,"pl-s"]],[[0,30,"pl-s"]],[[0,22,"pl-s"]],[[0,19,"pl-s"]],[[0,9,"pl-s"]],[[0,22,"pl-s"]],[[0,11,"pl-s"]],[[0,30,"pl-s"],[29,30,"pl-pds"],[34,37,"pl-s"],[34,35,"pl-pds"]],[[0,19,"pl-s"]],[[0,0,"pl-s"]],[[0,36,"pl-s"]],[[0,22,"pl-s"]],[[0,15,"pl-s"]],[[0,5,"pl-s"],[4,5,"pl-pds"],[13,16,"pl-s"],[13,14,"pl-pds"],[15,16,"pl-pds"],[25,26,"pl-s"],[25,26,"pl-pds"]],[[0,1,"pl-s"]],[[0,15,"pl-s"]],[[0,14,"pl-s"]],[[0,15,"pl-s"]],[[0,5,"pl-s"],[4,5,"pl-pds"],[13,16,"pl-s"],[13,14,"pl-pds"],[15,16,"pl-pds"],[25,26,"pl-s"],[25,26,"pl-pds"]],[[0,1,"pl-s"]],[[0,1,"pl-s"]],[[0,22,"pl-s"]],[[0,18,"pl-s"],[17,18,"pl-pds"],[26,29,"pl-s"],[26,27,"pl-pds"],[28,29,"pl-pds"],[38,52,"pl-s"],[38,39,"pl-pds"],[51,52,"pl-pds"],[55,58,"pl-s"],[55,56,"pl-pds"]],[[0,0,"pl-s"]],[[0,37,"pl-s"]],[[0,52,"pl-s"],[51,52,"pl-pds"],[60,63,"pl-s"],[60,61,"pl-pds"],[62,63,"pl-pds"],[72,73,"pl-s"],[72,73,"pl-pds"]],[[0,32,"pl-s"],[31,32,"pl-pds"],[40,43,"pl-s"],[40,41,"pl-pds"],[42,43,"pl-pds"],[52,53,"pl-s"],[52,53,"pl-pds"]],[[0,0,"pl-s"]],[[0,14,"pl-s"]],[[0,11,"pl-s"],[10,11,"pl-pds"],[19,22,"pl-s"],[19,20,"pl-pds"],[21,22,"pl-pds"],[31,32,"pl-s"],[31,32,"pl-pds"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,8,"pl-s"]],[[0,0,"pl-s"]],[[0,45,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,18,"pl-s"]],[[0,6,"pl-s"]],[[0,0,"pl-s"]],[[0,11,"pl-s"]],[[0,17,"pl-s"],[16,17,"pl-pds"],[20,23,"pl-s"],[20,21,"pl-pds"],[22,23,"pl-pds"],[23,26,"pl-c1"],[27,30,"pl-c1"],[31,32,"pl-c1"],[34,71,"pl-s"],[34,35,"pl-pds"]],[[0,0,"pl-s"]],[[0,35,"pl-s"],[34,35,"pl-pds"],[36,43,"pl-s"],[36,37,"pl-pds"],[42,43,"pl-pds"]],[],[[0,6,"pl-s"],[0,1,"pl-pds"],[1,2,"pl-pds"],[2,3,"pl-pds"]],[[0,13,"pl-s"]],[[0,45,"pl-s"]],[[0,20,"pl-s"]],[[0,0,"pl-s"]],[[0,16,"pl-s"]],[[0,0,"pl-s"]],[[0,8,"pl-s"],[7,8,"pl-pds"],[12,16,"pl-s"],[12,13,"pl-pds"],[15,16,"pl-pds"],[20,37,"pl-s"],[20,21,"pl-pds"]],[[0,0,"pl-s"]],[[0,12,"pl-s"]],[[0,70,"pl-s"]],[[0,0,"pl-s"]],[[0,33,"pl-s"]],[[0,0,"pl-s"]],[[0,46,"pl-s"]],[[0,0,"pl-s"]],[[0,43,"pl-s"]],[[0,0,"pl-s"]],[[0,31,"pl-s"]],[[0,3,"pl-s"],[0,1,"pl-pds"],[1,2,"pl-pds"],[2,3,"pl-pds"]],[],[[0,7,"pl-c"],[0,1,"pl-c"]],[],[[0,1,"pl-c1"]],[],[[1,2,"pl-c1"]],[],[[0,6,"pl-s"],[0,1,"pl-pds"],[1,2,"pl-pds"],[2,3,"pl-pds"]],[[0,46,"pl-s"]],[[0,49,"pl-s"]],[[0,50,"pl-s"]],[[0,57,"pl-s"]],[[0,3,"pl-s"],[0,1,"pl-pds"],[1,2,"pl-pds"],[2,3,"pl-pds"]],[],[[1,2,"pl-c1"]],[],[[0,6,"pl-s"],[0,1,"pl-pds"],[1,2,"pl-pds"],[2,3,"pl-pds"]],[[0,50,"pl-s"]],[[0,56,"pl-s"]],[[0,47,"pl-s"]],[[0,3,"pl-s"],[0,1,"pl-pds"],[1,2,"pl-pds"],[2,3,"pl-pds"]],[],[[1,2,"pl-c1"]],[],[[0,6,"pl-s"],[0,1,"pl-pds"],[1,2,"pl-pds"],[2,3,"pl-pds"]],[[0,48,"pl-s"]],[[0,51,"pl-s"]],[[0,47,"pl-s"]],[[0,3,"pl-s"],[0,1,"pl-pds"],[1,2,"pl-pds"],[2,3,"pl-pds"]],[],[[0,1,"pl-c1"]],[],[[0,6,"pl-s"],[0,1,"pl-pds"],[1,2,"pl-pds"],[2,3,"pl-pds"]],[[0,31,"pl-s"]],[[0,3,"pl-s"]],[[0,10,"pl-s"]],[[0,9,"pl-s"]],[[0,3,"pl-s"],[0,1,"pl-pds"],[1,2,"pl-pds"],[2,3,"pl-pds"]],[],[[0,1,"pl-c1"]],[],[[1,2,"pl-c1"]],[],[[1,2,"pl-c1"],[16,18,"pl-c1"],[22,23,"pl-k"],[33,38,"pl-s"],[33,34,"pl-pds"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,17,"pl-s"]],[[0,16,"pl-s"]],[[0,13,"pl-s"]],[[0,11,"pl-s"]],[[0,39,"pl-s"],[38,39,"pl-pds"],[42,43,"pl-s"],[42,43,"pl-pds"]],[[0,46,"pl-s"],[45,46,"pl-pds"],[49,50,"pl-s"],[49,50,"pl-pds"]],[[0,10,"pl-s"]],[[0,18,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,9,"pl-s"]],[[0,22,"pl-s"]],[[0,0,"pl-s"]],[[0,30,"pl-s"]],[[0,0,"pl-s"]],[[0,25,"pl-s"]],[[0,0,"pl-s"]],[[0,29,"pl-s"]],[[0,0,"pl-s"]],[[0,17,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,12,"pl-s"]],[[0,26,"pl-s"]],[[0,17,"pl-s"]],[[0,10,"pl-s"]],[[0,17,"pl-s"]],[[0,34,"pl-s"]],[[0,17,"pl-s"]],[[0,10,"pl-s"]],[[0,31,"pl-s"]],[[0,1,"pl-s"]],[[0,17,"pl-s"]],[[0,10,"pl-s"]],[[0,40,"pl-s"]],[[0,29,"pl-s"]],[[0,20,"pl-s"]],[[0,10,"pl-s"]],[[0,19,"pl-s"]],[[0,33,"pl-s"]],[[0,17,"pl-s"]],[[0,10,"pl-s"]],[[0,50,"pl-s"]],[[0,21,"pl-s"]],[[0,18,"pl-s"]],[[0,9,"pl-s"]],[[0,19,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,7,"pl-s"]],[[0,0,"pl-s"]],[[0,56,"pl-s"]],[[0,0,"pl-s"]],[[0,29,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,10,"pl-s"]],[[0,47,"pl-s"]],[[0,18,"pl-s"]],[[0,25,"pl-s"]],[[0,27,"pl-s"]],[[0,9,"pl-s"]],[[0,60,"pl-s"]],[[0,18,"pl-s"]],[[0,0,"pl-s"]],[[0,34,"pl-s"]],[[0,23,"pl-s"]],[[0,9,"pl-s"]],[[0,18,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,18,"pl-s"]],[[0,0,"pl-s"]],[[0,17,"pl-s"]],[[0,0,"pl-s"]],[[0,29,"pl-s"]],[[0,0,"pl-s"]],[[0,16,"pl-s"]],[[0,0,"pl-s"]],[[0,19,"pl-s"]],[[0,0,"pl-s"]],[[0,48,"pl-s"]],[[0,0,"pl-s"]],[[0,80,"pl-s"]],[[0,0,"pl-s"]],[[0,19,"pl-s"]],[[0,0,"pl-s"]],[[0,47,"pl-s"]],[[0,0,"pl-s"]],[[0,19,"pl-s"]],[[0,0,"pl-s"]],[[0,24,"pl-s"]],[[0,0,"pl-s"]],[[0,21,"pl-s"]],[[0,0,"pl-s"]],[[0,11,"pl-s"],[10,11,"pl-pds"],[12,20,"pl-s"],[12,13,"pl-pds"]],[[0,0,"pl-s"]],[[0,20,"pl-s"]],[[0,0,"pl-s"]],[[0,22,"pl-s"],[21,22,"pl-pds"],[23,24,"pl-s"],[23,24,"pl-pds"]],[[0,0,"pl-s"]],[[0,27,"pl-s"]],[[0,0,"pl-s"]],[[0,21,"pl-s"]],[[0,0,"pl-s"]],[[0,38,"pl-s"]],[[0,0,"pl-s"]],[[0,41,"pl-s"]],[[0,0,"pl-s"]],[[0,57,"pl-s"]],[[0,0,"pl-s"]],[[0,32,"pl-s"]],[[0,0,"pl-s"]],[[0,25,"pl-s"]],[[0,0,"pl-s"]],[[0,23,"pl-s"]],[[0,0,"pl-s"]],[[0,19,"pl-s"],[18,19,"pl-pds"],[20,30,"pl-s"],[20,21,"pl-pds"]],[[0,0,"pl-s"]],[[0,28,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,13,"pl-s"]],[[0,0,"pl-s"]],[[0,24,"pl-s"]],[[0,14,"pl-s"]],[[0,4,"pl-s"]],[[0,18,"pl-s"]],[[0,38,"pl-s"]],[[0,38,"pl-s"]],[[0,4,"pl-s"]],[[0,20,"pl-s"]],[[0,23,"pl-s"]],[[0,14,"pl-s"]],[[0,4,"pl-s"]],[[0,28,"pl-s"]],[[0,26,"pl-s"]],[[0,14,"pl-s"]],[[0,4,"pl-s"]],[[0,34,"pl-s"]],[[0,55,"pl-s"]],[[0,3,"pl-s"]],[[0,13,"pl-s"]],[[0,4,"pl-s"]],[[0,41,"pl-s"]],[[0,35,"pl-s"]],[[0,51,"pl-s"]],[[0,41,"pl-s"]],[[0,13,"pl-s"]],[[0,4,"pl-s"]],[[0,41,"pl-s"]],[[0,35,"pl-s"]],[[0,58,"pl-s"]],[[0,26,"pl-s"]],[[0,19,"pl-s"]],[[0,9,"pl-s"]],[[0,23,"pl-s"]],[[0,0,"pl-s"]],[[0,33,"pl-s"]],[[0,8,"pl-s"]],[[0,9,"pl-s"]],[[0,45,"pl-s"]],[[0,28,"pl-s"]],[[0,37,"pl-s"]],[[0,34,"pl-s"]],[[0,9,"pl-s"]],[[0,9,"pl-s"]],[[0,42,"pl-s"]],[[0,0,"pl-s"]],[[0,39,"pl-s"]],[[0,9,"pl-s"]],[[0,9,"pl-s"]],[[0,52,"pl-s"]],[[0,0,"pl-s"]],[[0,3,"pl-s"]],[[0,31,"pl-s"]],[[0,62,"pl-s"]],[[0,10,"pl-s"]],[[0,28,"pl-s"]],[[0,0,"pl-s"]],[[0,9,"pl-s"]],[[0,9,"pl-s"]],[[0,24,"pl-s"]],[[0,0,"pl-s"]],[[0,18,"pl-s"],[17,18,"pl-pds"],[19,27,"pl-s"],[19,20,"pl-pds"]],[[0,9,"pl-s"]],[[0,9,"pl-s"]],[[0,27,"pl-s"]],[[0,27,"pl-s"]],[[0,20,"pl-s"]],[[0,9,"pl-s"]],[[0,29,"pl-s"],[28,29,"pl-pds"],[30,31,"pl-s"],[30,31,"pl-pds"]],[[0,32,"pl-s"]],[[0,9,"pl-s"]],[[0,34,"pl-s"]],[[0,22,"pl-s"]],[[0,9,"pl-s"]],[[0,52,"pl-s"]],[[0,28,"pl-s"]],[[0,0,"pl-s"]],[[0,45,"pl-s"]],[[0,3,"pl-s"]],[[0,22,"pl-s"]],[[0,9,"pl-s"]],[[0,19,"pl-s"]],[[0,48,"pl-s"]],[[0,22,"pl-s"]],[[0,9,"pl-s"]],[[0,24,"pl-s"]],[[0,44,"pl-s"]],[[0,23,"pl-s"]],[[0,57,"pl-s"]],[[0,9,"pl-s"]],[[0,41,"pl-s"]],[[0,0,"pl-s"]],[[0,39,"pl-s"]],[[0,40,"pl-s"]],[[0,11,"pl-s"]],[[0,32,"pl-s"]],[[0,9,"pl-s"]],[[0,9,"pl-s"]],[[0,26,"pl-s"]],[[0,30,"pl-s"]],[[0,3,"pl-s"]],[[0,40,"pl-s"]],[[0,9,"pl-s"]],[[0,26,"pl-s"],[25,26,"pl-pds"],[27,37,"pl-s"],[27,28,"pl-pds"]],[[0,8,"pl-s"]],[[0,9,"pl-s"]],[[0,23,"pl-s"]],[[0,38,"pl-s"]],[[0,0,"pl-s"]],[[0,20,"pl-s"]],[[0,57,"pl-s"],[56,57,"pl-pds"],[62,65,"pl-s"],[62,63,"pl-pds"]],[[0,51,"pl-s"],[50,51,"pl-pds"],[56,58,"pl-s"],[56,57,"pl-pds"]],[[0,36,"pl-s"],[35,36,"pl-pds"],[40,41,"pl-s"],[40,41,"pl-pds"]],[[0,10,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,43,"pl-s"]],[[0,0,"pl-s"]],[[0,17,"pl-s"]],[[0,0,"pl-s"]],[[0,22,"pl-s"]],[[0,0,"pl-s"]],[[0,22,"pl-s"]],[[0,0,"pl-s"]],[[0,33,"pl-s"]],[[0,0,"pl-s"]],[[0,29,"pl-s"]],[[0,0,"pl-s"]],[[0,21,"pl-s"]],[[0,0,"pl-s"]],[[0,29,"pl-s"]],[[0,0,"pl-s"]],[[0,21,"pl-s"]],[[0,0,"pl-s"]],[[0,25,"pl-s"]],[[0,0,"pl-s"]],[[0,33,"pl-s"]],[[0,0,"pl-s"]],[[0,31,"pl-s"]],[[0,0,"pl-s"]],[[0,22,"pl-s"]],[[0,0,"pl-s"]],[[0,21,"pl-s"]],[[0,0,"pl-s"]],[[0,16,"pl-s"]],[[0,0,"pl-s"]],[[0,23,"pl-s"]],[[0,0,"pl-s"]],[[0,25,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,3,"pl-s"]],[[0,21,"pl-s"]],[[0,0,"pl-s"]],[[0,2,"pl-s"]],[[0,12,"pl-s"]],[[0,15,"pl-s"]],[[0,2,"pl-s"]],[[0,28,"pl-s"]],[[0,10,"pl-s"]],[[0,17,"pl-s"]],[[0,13,"pl-s"]],[[0,26,"pl-s"]],[[0,2,"pl-s"]],[[0,25,"pl-s"]],[[0,23,"pl-s"]],[[0,2,"pl-s"]],[[0,9,"pl-s"]],[[0,9,"pl-s"]],[[0,14,"pl-s"]],[[0,13,"pl-s"]],[[0,12,"pl-s"]],[[0,24,"pl-s"]],[[0,2,"pl-s"]],[[0,26,"pl-s"]],[[0,2,"pl-s"]],[[0,31,"pl-s"]],[[0,40,"pl-s"]],[[0,34,"pl-s"]],[[0,2,"pl-s"]],[[0,0,"pl-s"]],[[0,58,"pl-s"]],[[0,53,"pl-s"]],[[0,29,"pl-s"]],[[0,41,"pl-s"]],[[0,31,"pl-s"]],[[0,0,"pl-s"]],[[0,38,"pl-s"]],[[0,0,"pl-s"]],[[0,2,"pl-s"]],[[0,30,"pl-s"]],[[0,20,"pl-s"]],[[0,2,"pl-s"]],[[0,19,"pl-s"]],[[0,11,"pl-s"]],[[0,43,"pl-s"]],[[0,0,"pl-s"]],[[0,33,"pl-s"]],[[0,0,"pl-s"]],[[0,25,"pl-s"]],[[0,15,"pl-s"]],[[0,49,"pl-s"]],[[0,0,"pl-s"]],[[0,25,"pl-s"]],[[0,0,"pl-s"]],[[0,2,"pl-s"]],[[0,12,"pl-s"]],[[0,16,"pl-s"]],[[0,2,"pl-s"]],[[0,32,"pl-s"]],[[0,9,"pl-s"]],[[0,13,"pl-s"]],[[0,22,"pl-s"]],[[0,33,"pl-s"]],[[0,0,"pl-s"]],[[0,19,"pl-s"]],[[0,16,"pl-s"]],[[0,51,"pl-s"]],[[0,0,"pl-s"]],[[0,25,"pl-s"]],[[0,0,"pl-s"]],[[0,8,"pl-s"]],[[0,9,"pl-s"]],[[0,14,"pl-s"]],[[0,18,"pl-s"]],[[0,11,"pl-s"]],[[0,2,"pl-s"]],[[0,0,"pl-s"]],[[0,29,"pl-s"]],[[0,0,"pl-s"]],[[0,9,"pl-s"]],[[0,9,"pl-s"]],[[0,14,"pl-s"]],[[0,13,"pl-s"]],[[0,11,"pl-s"]],[[0,24,"pl-s"]],[[0,23,"pl-s"]],[[0,0,"pl-s"]],[[0,40,"pl-s"]],[[0,0,"pl-s"]],[[0,0,"pl-s"]],[[0,16,"pl-s"]],[[0,18,"pl-s"]],[[0,10,"pl-s"]],[[0,14,"pl-s"]],[[0,18,"pl-s"]],[[0,11,"pl-s"]],[[0,20,"pl-s"]],[[0,3,"pl-s"]],[[0,41,"pl-s"]],[[0,24,"pl-s"]],[[0,20,"pl-s"],[19,20,"pl-pds"],[26,51,"pl-s"],[26,27,"pl-pds"],[50,51,"pl-pds"],[57,61,"pl-s"],[57,58,"pl-pds"]],[[0,53,"pl-s"],[52,53,"pl-pds"],[63,64,"pl-s"],[63,64,"pl-pds"]],[[0,10,"pl-s"]],[[0,16,"pl-s"]],[[0,0,"pl-s"]],[[0,26,"pl-s"]],[[0,0,"pl-s"]],[[0,54,"pl-s"]],[[0,0,"pl-s"]],[[0,25,"pl-s"]],[[0,0,"pl-s"]],[[0,41,"pl-s"]],[[0,30,"pl-s"]],[[0,9,"pl-s"]],[[0,16,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,25,"pl-s"],[24,25,"pl-pds"],[29,30,"pl-s"],[29,30,"pl-pds"]],[[0,13,"pl-s"]],[[0,32,"pl-s"]],[[0,10,"pl-s"]],[[0,17,"pl-s"]],[[0,7,"pl-s"]],[[0,31,"pl-s"]],[[0,0,"pl-s"]],[[0,20,"pl-s"]],[[0,0,"pl-s"]],[[0,20,"pl-s"]],[[0,9,"pl-s"]],[[0,13,"pl-s"]],[[0,27,"pl-s"]],[[0,0,"pl-s"]],[[0,20,"pl-s"]],[[0,9,"pl-s"]],[[0,22,"pl-s"]],[[0,29,"pl-s"]],[[0,0,"pl-s"]],[[0,15,"pl-s"]],[[0,51,"pl-s"]],[[0,9,"pl-s"]],[[0,19,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,66,"pl-s"]],[[0,0,"pl-s"]],[[0,63,"pl-s"]],[[0,47,"pl-s"]],[[0,41,"pl-s"]],[[0,0,"pl-s"]],[[0,101,"pl-s"]],[[0,0,"pl-s"]],[[0,101,"pl-s"]],[[0,0,"pl-s"]],[[0,14,"pl-s"]],[[0,0,"pl-s"]],[[0,15,"pl-s"]],[[0,12,"pl-s"]],[[0,0,"pl-s"]],[[0,20,"pl-s"]],[[0,0,"pl-s"]],[[0,14,"pl-s"]],[[0,0,"pl-s"]],[[0,9,"pl-s"]],[[0,0,"pl-s"]],[[0,51,"pl-s"]],[[0,0,"pl-s"]],[[0,11,"pl-s"]],[[0,0,"pl-s"]],[[0,15,"pl-s"]],[[0,0,"pl-s"]],[[0,22,"pl-s"]],[[0,0,"pl-s"]],[[0,24,"pl-s"]],[[0,0,"pl-s"]],[[0,22,"pl-s"]],[[0,0,"pl-s"]],[[0,17,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,14,"pl-s"]],[[0,0,"pl-s"]],[[0,46,"pl-s"]],[[0,27,"pl-s"]],[[0,64,"pl-s"]],[[0,49,"pl-s"]],[[0,43,"pl-s"]],[[0,40,"pl-s"]],[[0,3,"pl-s"]],[[0,19,"pl-s"]],[[0,18,"pl-s"]],[[0,24,"pl-s"]],[[0,19,"pl-s"]],[[0,0,"pl-s"]],[[0,47,"pl-s"]],[[0,25,"pl-s"]],[[0,38,"pl-s"]],[[0,39,"pl-s"]],[[0,1,"pl-s"]],[[0,64,"pl-s"]],[[0,22,"pl-s"]],[[0,25,"pl-s"]],[[0,43,"pl-s"]],[[0,39,"pl-s"]],[[0,38,"pl-s"]],[[0,28,"pl-s"]],[[0,58,"pl-s"]],[[0,1,"pl-s"]],[[0,49,"pl-s"]],[[0,26,"pl-s"]],[[0,27,"pl-s"]],[[0,40,"pl-s"]],[[0,28,"pl-s"]],[[0,19,"pl-s"]],[[0,53,"pl-s"]],[[0,1,"pl-s"]],[[0,9,"pl-s"]],[[0,0,"pl-s"]],[[0,42,"pl-s"]],[[0,43,"pl-s"]],[[0,42,"pl-s"]],[[0,42,"pl-s"]],[[0,42,"pl-s"]],[[0,0,"pl-s"]],[[0,49,"pl-s"]],[[0,50,"pl-s"]],[[0,50,"pl-s"]],[[0,51,"pl-s"]],[[0,50,"pl-s"]],[[0,50,"pl-s"]],[[0,50,"pl-s"]],[[0,50,"pl-s"]],[[0,0,"pl-s"]],[[0,49,"pl-s"]],[[0,49,"pl-s"]],[[0,49,"pl-s"]],[[0,49,"pl-s"]],[[0,49,"pl-s"]],[[0,49,"pl-s"]],[[0,49,"pl-s"]],[[0,49,"pl-s"]],[[0,49,"pl-s"]],[[0,49,"pl-s"]],[[0,49,"pl-s"]],[[0,0,"pl-s"]],[[0,24,"pl-s"]],[[0,19,"pl-s"]],[[0,25,"pl-s"]],[[0,0,"pl-s"]],[[0,15,"pl-s"]],[[0,19,"pl-s"]],[[0,24,"pl-s"]],[[0,9,"pl-s"]],[[0,17,"pl-s"]],[[0,24,"pl-s"]],[[0,27,"pl-s"]],[[0,0,"pl-s"]],[[0,18,"pl-s"]],[[0,34,"pl-s"]],[[0,11,"pl-s"]],[[0,34,"pl-s"]],[[0,28,"pl-s"]],[[0,30,"pl-s"]],[[0,0,"pl-s"]],[[0,35,"pl-s"]],[[0,12,"pl-s"]],[[0,20,"pl-s"]],[[0,18,"pl-s"]],[[0,1,"pl-s"]],[[0,39,"pl-s"]],[[0,0,"pl-s"]],[[0,38,"pl-s"]],[[0,20,"pl-s"]],[[0,37,"pl-s"]],[[0,13,"pl-s"]],[[0,21,"pl-s"]],[[0,19,"pl-s"]],[[0,7,"pl-s"]],[[0,42,"pl-s"]],[[0,1,"pl-s"]],[[0,0,"pl-s"]],[[0,0,"pl-s"]],[[0,26,"pl-s"]],[[0,9,"pl-s"]],[[0,43,"pl-s"]],[[0,21,"pl-s"]],[[0,0,"pl-s"]],[[0,46,"pl-s"]],[[0,0,"pl-s"]],[[0,7,"pl-s"]],[[0,18,"pl-s"]],[[0,15,"pl-s"]],[[0,30,"pl-s"]],[[0,18,"pl-s"]],[[0,17,"pl-s"]],[[0,20,"pl-s"]],[[0,20,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,7,"pl-s"]],[[0,17,"pl-s"]],[[0,19,"pl-s"]],[[0,1,"pl-s"]],[[0,7,"pl-s"]],[[0,7,"pl-s"]],[[0,0,"pl-s"]],[[0,26,"pl-s"]],[[0,19,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]]],"colorizedLines":null}},"title":"backend-tutorial/java-tutorial/ch24_MySQL_basic.md at main · timerring/backend-tutorial","appPayload":{},"meta":{"title":"backend-tutorial/java-tutorial/ch24_MySQL_basic.md at main · timerring/backend-tutorial"}}</script>
  <div data-target="react-app.reactRoot"><meta name="github-code-view-meta-stats" id="github-code-view-meta-stats" data-hydrostats="publish"/> <!-- --> <a hidden="" id="code-view-repo-link" href="/timerring/backend-tutorial" data-discover="true"></a> <div class="d-none"></div><div><div style="--spacing:var(--spacing-none)" class="prc-PageLayout-PageLayoutRoot--KH-d" data-component="SplitPageLayout" data-has-sidebar="true"><div class="prc-PageLayout-SidebarWrapper-kLG4B CopilotSidePanelSidebar-module__SidePanel__L3O0C CopilotSidePanelSidebar-module__HiddenSidePanel__TBRGn" style="--spacing-column:var(--spacing-none)" data-is-hidden="false" data-position="end" data-sticky="true" data-responsive-variant="fullscreen"><div class="prc-PageLayout-VerticalDivider-9QRmK prc-PageLayout-SidebarVerticalDivider-0Rl0V" data-component="PageLayout.VerticalDivider" data-variant="line" data-position="end" style="--spacing:var(--spacing-none)"><div class="prc-PageLayout-DraggableHandle-9s6B4" data-component="PageLayout.DragHandle" role="slider" aria-label="Draggable pane splitter" aria-valuemin="450" aria-valuemax="768" aria-valuenow="544" aria-valuetext="Pane width 544 pixels" tabindex="0"></div></div><div class="prc-PageLayout-Sidebar-iciWg" data-component="SplitPageLayout.Sidebar" data-resizable="true" style="--spacing:var(--spacing-normal);--pane-min-width:450px;--pane-max-width:768px;--pane-width-custom:544px;--pane-width-size:var(--pane-width-custom);--pane-width:544px"><div class="height-full" data-testid="copilot-code-view-side-panel"><div id="copilot-side-panel-content" class="height-full"></div></div></div></div><div class="prc-PageLayout-PageLayoutWrapper-2BhU2" data-width="full"><div class="prc-PageLayout-PageLayoutContent-BneH9"><div id="repos-file-tree-sidebar" class="CodeViewFileTreeLayout-module__sidebar__n_Aau" tabindex="0"><div class="prc-PageLayout-PaneWrapper-pHPop ReposFileTreePane-module__Pane__rBZpI ReposFileTreePane-module__HideTree__AYZnm ReposFileTreePane-module__HidePane__VHAVt" style="--offset-header:0px;--spacing-row:var(--spacing-none);--spacing-column:var(--spacing-none)" data-is-hidden="false" data-position="start" data-sticky="true"><div class="prc-PageLayout-HorizontalDivider-JLVqp prc-PageLayout-PaneHorizontalDivider-9tbnE" data-component="PageLayout.HorizontalDivider" data-variant-regular="none" data-variant-narrow="none" data-position="start" style="--spacing-divider:var(--spacing-none);--spacing:var(--spacing-none)"></div><div class="prc-PageLayout-Pane-AyzHK" data-component="SplitPageLayout.Pane" data-resizable="true" style="--spacing:var(--spacing-none);--pane-min-width:256px;--pane-max-width:calc(100vw - var(--pane-max-width-diff));--pane-width-size:var(--pane-width-large);--pane-width:320px"></div><div class="prc-PageLayout-VerticalDivider-9QRmK prc-PageLayout-PaneVerticalDivider-le57g" data-component="PageLayout.VerticalDivider" data-variant-narrow="none" data-variant-regular="line" data-variant-wide="line" data-position="start" style="--spacing:var(--spacing-none)"><div class="prc-PageLayout-DraggableHandle-9s6B4" data-component="PageLayout.DragHandle" role="slider" aria-label="Draggable pane splitter" aria-valuemin="256" aria-valuemax="600" aria-valuenow="320" aria-valuetext="Pane width 320 pixels" tabindex="0"></div></div></div></div><div data-component="SplitPageLayout.Content" class="prc-PageLayout-ContentWrapper-gR9eG"><div class="prc-PageLayout-Content-xWL-A" data-width="full" style="--spacing:var(--spacing-none)"><div class="SharedPageLayout-module__content__IwGAp" data-selector="repos-split-pane-content" id="repos-split-pane-content" tabindex="0"> <!-- --> <div class="container CodeViewHeader-module__Box__JkPOb"><div class="CodeViewHeader-module__StickyHeader__Qn7UN" id="StickyHeader"><div class="CodeViewHeader-module__Box_1__SbNDV"><div class="CodeViewHeader-module__Box_2__TB46f"><div class="react-code-view-header-wrap--narrow CodeViewHeader-module__Box_3__q1zUL"><div class="CodeViewHeader-module__treeToggleWrapper__RQ__9"><h2 class="use-tree-pane-module__Heading__s4QbZ prc-Heading-Heading-MtWFE" data-component="Heading"><button data-component="Button" type="button" aria-label="Expand file tree" data-testid="expand-file-tree-button-mobile" class="prc-Button-ButtonBase-9n-Xk ExpandFileTreeButton-module__Button_1__Svs95" data-loading="false" data-size="medium" data-variant="invisible"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-arrow-left" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.78 12.53a.75.75 0 0 1-1.06 0L2.47 8.28a.75.75 0 0 1 0-1.06l4.25-4.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L4.81 7h7.44a.75.75 0 0 1 0 1.5H4.81l2.97 2.97a.75.75 0 0 1 0 1.06Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3">Files</span></span></button><button data-component="IconButton" type="button" data-testid="expand-file-tree-button" aria-controls="repos-file-tree" class="prc-Button-ButtonBase-9n-Xk position-relative ExpandFileTreeButton-module__expandButton__hDOcv ExpandFileTreeButton-module__filesButtonBreakpoint__zEvz3 fgColor-muted prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="invisible" aria-labelledby="_R_4lla9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-sidebar-collapse" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M6.823 7.823a.25.25 0 0 1 0 .354l-2.396 2.396A.25.25 0 0 1 4 10.396V5.604a.25.25 0 0 1 .427-.177Z"></path><path d="M1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25V1.75C0 .784.784 0 1.75 0ZM1.5 1.75v12.5c0 .138.112.25.25.25H9.5v-13H1.75a.25.25 0 0 0-.25.25ZM11 14.5h3.25a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25H11Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="se" data-component="Tooltip" aria-hidden="true" id="_R_4lla9lik5_">Expand file tree</span><div class="d-none"></div></h2></div><div class="react-code-view-header-mb--narrow mr-2"><button data-component="Button" type="button" aria-haspopup="true" aria-expanded="false" tabindex="0" aria-label="main branch" data-testid="anchor-button" data-icv-name="Switch branches/tags" class="prc-Button-ButtonBase-9n-Xk ref-selector-class RefSelectorAnchoredOverlay-module__RefSelectorOverlayBtn__a3WK3" data-loading="false" data-size="medium" data-variant="default" id="ref-picker-repos-header-ref-selector-wide"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-git-branch" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3"><div class="RefSelectorAnchoredOverlay-module__RefSelectorOverlayContainer__yaf4p"><div style="max-width:125px" class="ref-selector-button-text-container RefSelectorAnchoredOverlay-module__RefSelectorBtnTextContainer__Di3rk"><span class="RefSelectorAnchoredOverlay-module__RefSelectorText__w_fmP">main</span></div></div></span><span data-component="trailingVisual" class="prc-Button-Visual-YNt2F prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path></svg></span></span></button><div class="d-none"></div></div><div class="react-code-view-header-mb--narrow CodeViewHeader-module__Box_5__MQ0hL"><div class="Breadcrumb-module__container__Vxvev Breadcrumb-module__lg__Rjz0A"><nav data-testid="breadcrumbs" aria-labelledby="repos-header-breadcrumb-heading" id="repos-header-breadcrumb" class="Breadcrumb-module__nav__rQFDj"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading" id="repos-header-breadcrumb-heading">Breadcrumbs</h2><ol class="Breadcrumb-module__list__ZH6zr"><li class="Breadcrumb-module__listItem__Ib0x_"><a class="Breadcrumb-module__repoLink__O2Nbs prc-Link-Link-9ZwDx" data-component="Link" data-testid="breadcrumbs-repo-link" href="/timerring/backend-tutorial/tree/main" data-discover="true">backend-tutorial</a></li><li class="Breadcrumb-module__listItem__Ib0x_"><span class="Breadcrumb-module__separator__eNwsI Breadcrumb-module__lg__Rjz0A" aria-hidden="true">/</span><a class="Breadcrumb-module__directoryLink__kQy_t prc-Link-Link-9ZwDx" data-component="Link" href="/timerring/backend-tutorial/tree/main/java-tutorial" data-discover="true">java-tutorial</a></li></ol></nav><div data-testid="breadcrumbs-filename" class="Breadcrumb-module__filename__equZR"><span class="Breadcrumb-module__separator__eNwsI Breadcrumb-module__lg__Rjz0A" aria-hidden="true">/</span><h1 class="Breadcrumb-module__filenameHeading__MNMtw Breadcrumb-module__lg__Rjz0A prc-Heading-Heading-MtWFE" data-component="Heading" tabindex="-1" id="file-name-id">ch24_MySQL_basic.md</h1></div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-9n-Xk ml-2 prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-labelledby="_R_7lla9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="CopyToClipboardIconButton-module__tooltip__WyiwL prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" data-component="Tooltip" aria-label="Copy path" aria-hidden="true" id="_R_7lla9lik5_">Copy path</span></div></div></div><div class="react-code-view-header-element--wide"><div class="CodeViewHeader-module__Box_7___0R6c"><div class="d-flex gap-2"><div><div class="CodeViewHeader-module__FileResultsList__JDzUy"><span class="d-flex FileResultsList-module__FilesSearchBox__ivVkc TextInput-wrapper prc-components-TextInputWrapper-Hpdqi prc-components-TextInputBaseWrapper-wY-n0" data-no-trailing-action="true" data-component="TextInput" data-leading-visual="true" data-trailing-visual="true" aria-busy="false"><span class="TextInput-icon" id="_R_5ipla9lik5_" aria-hidden="true" data-component="TextInput.LeadingVisual"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-search" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path></svg></span><input type="text" aria-label="Go to file" role="combobox" aria-controls="file-results-list" aria-expanded="false" aria-haspopup="dialog" autoCorrect="off" spellCheck="false" placeholder="Go to file" aria-describedby="_R_5ipla9lik5_ _R_5ipla9lik5H1_" data-component="input" class="prc-components-Input-IwWrt" value=""/><span class="TextInput-icon" id="_R_5ipla9lik5H1_" aria-hidden="true" data-component="TextInput.TrailingVisual"></span></span></div><div class="d-none"></div></div><button data-component="Button" type="button" style="display:none" class="prc-Button-ButtonBase-9n-Xk NavigationMenu-module__Button__LpKgm" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="text" class="prc-Button-Label-FWkx3">Blame</span></span></button><div class="d-none"></div><button data-component="IconButton" type="button" data-testid="more-file-actions-button-nav-menu-wide" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-9n-Xk js-blob-dropdown-click NavigationMenu-module__IconButton__HpX3G prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-labelledby="_R_v4pla9lik5_" id="_R_14pla9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" data-component="Tooltip" aria-hidden="true" id="_R_v4pla9lik5_">More file actions</span></div></div></div><div class="react-code-view-header-element--narrow"><div class="CodeViewHeader-module__Box_7___0R6c"><div class="d-flex gap-2"><button data-component="Button" type="button" style="display:none" class="prc-Button-ButtonBase-9n-Xk NavigationMenu-module__Button__LpKgm" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="text" class="prc-Button-Label-FWkx3">Blame</span></span></button><div class="d-none"></div><button data-component="IconButton" type="button" data-testid="more-file-actions-button-nav-menu-narrow" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-9n-Xk js-blob-dropdown-click NavigationMenu-module__IconButton__HpX3G prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-labelledby="_R_v4tla9lik5_" id="_R_14tla9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" data-component="Tooltip" aria-hidden="true" id="_R_v4tla9lik5_">More file actions</span></div></div></div></div></div></div></div><div class="CodeView-module__contentWrapper__cG2JH"><div class="react-code-view-bottom-padding"><div class="BlobTopBanners-module__Box__v_nvx"></div></div> <div class="d-none"></div><div class="d-flex flex-column border rounded-2 tmp-mb-3 pl-1"><div class="LatestCommit-module__Box__B25ZT"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading">Latest commit</h2><div style="width:120px" class="Skeleton Skeleton--text" data-testid="loading"> </div><div class="d-flex flex-shrink-0 gap-2"><div data-testid="latest-commit-details" class="d-none d-sm-flex flex-items-center"></div><div class="d-flex gap-2"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading">History</h2><a data-component="LinkButton" href="/timerring/backend-tutorial/commits/main/java-tutorial/ch24_MySQL_basic.md" class="prc-Button-ButtonBase-9n-Xk d-none d-lg-flex LinkButton-module__linkButton__nFnov flex-items-center fgColor-default" data-loading="false" data-size="small" data-variant="invisible"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-history" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m.427 1.927 1.215 1.215a8.002 8.002 0 1 1-1.6 5.685.75.75 0 1 1 1.493-.154 6.5 6.5 0 1 0 1.18-4.458l1.358 1.358A.25.25 0 0 1 3.896 6H.25A.25.25 0 0 1 0 5.75V2.104a.25.25 0 0 1 .427-.177ZM7.75 4a.75.75 0 0 1 .75.75v2.992l2.028.812a.75.75 0 0 1-.557 1.392l-2.5-1A.751.751 0 0 1 7 8.25v-3.5A.75.75 0 0 1 7.75 4Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3"><span class="fgColor-default">History</span></span></span></a><div class="d-sm-none"></div><div class="d-flex d-lg-none"><a data-component="LinkButton" aria-label="View commit history for this file." href="/timerring/backend-tutorial/commits/main/java-tutorial/ch24_MySQL_basic.md" class="prc-Button-ButtonBase-9n-Xk LinkButton-module__linkButton__nFnov flex-items-center fgColor-default" data-loading="false" data-size="small" data-variant="invisible" aria-describedby="_R_4mlala9lik5_"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-history" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m.427 1.927 1.215 1.215a8.002 8.002 0 1 1-1.6 5.685.75.75 0 1 1 1.493-.154 6.5 6.5 0 1 0 1.18-4.458l1.358 1.358A.25.25 0 0 1 3.896 6H.25A.25.25 0 0 1 0 5.75V2.104a.25.25 0 0 1 .427-.177ZM7.75 4a.75.75 0 0 1 .75.75v2.992l2.028.812a.75.75 0 0 1-.557 1.392l-2.5-1A.751.751 0 0 1 7 8.25v-3.5A.75.75 0 0 1 7.75 4Z"></path></svg></span></span></a><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="s" data-component="Tooltip" role="tooltip" aria-hidden="true" id="_R_4mlala9lik5_">History</span></div></div></div></div></div><div class="d-flex flex-row"><div class="container BlobViewContent-module__blobContainer__DtH2d"><div class="react-code-size-details-banner BlobViewContent-module__codeSizeDetails__e5sUw"><div class="react-code-size-details-banner CodeSizeDetails-module__Box__VcD6l"><div class="text-mono CodeSizeDetails-module__Box_1__GVxQL"><div data-testid="blob-size" class="CodeSizeDetails-module__Truncate_1__lE93V prc-Truncate-Truncate-2G1eo" data-inline="true" title="119 KB" style="--truncate-max-width:100%"><span>3812 lines (2921 loc) · 119 KB</span></div></div></div></div><div class="react-blob-view-header-sticky BlobViewContent-module__stickyHeader__VwxB5" id="repos-sticky-header"><div class="BlobViewHeader-module__Box__yhm9u"><div class="react-blob-sticky-header"><div class="FileNameStickyHeader-module__outerWrapper__ZL4Xc FileNameStickyHeader-module__outerWrapperHidden__Zpynk"><div class="FileNameStickyHeader-module__Box_1__Hazu5"><div class="FileNameStickyHeader-module__Box_2__hoolP"><div class="FileNameStickyHeader-module__Box_3__MVKsk"><button data-component="Button" type="button" aria-haspopup="true" aria-expanded="false" tabindex="0" aria-label="main branch" data-testid="anchor-button" data-icv-name="Switch branches/tags" class="prc-Button-ButtonBase-9n-Xk ref-selector-class RefSelectorAnchoredOverlay-module__RefSelectorOverlayBtn__a3WK3" data-loading="false" data-size="medium" data-variant="default" id="ref-picker-repos-header-ref-selector"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-git-branch" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3"><div class="RefSelectorAnchoredOverlay-module__RefSelectorOverlayContainer__yaf4p"><div style="max-width:125px" class="ref-selector-button-text-container RefSelectorAnchoredOverlay-module__RefSelectorBtnTextContainer__Di3rk"><span class="RefSelectorAnchoredOverlay-module__RefSelectorText__w_fmP">main</span></div></div></span><span data-component="trailingVisual" class="prc-Button-Visual-YNt2F prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path></svg></span></span></button><div class="d-none"></div></div><div class="FileNameStickyHeader-module__Box_4__FLhtt"><div class="Breadcrumb-module__container__Vxvev Breadcrumb-module__md__Wb1Gs"><nav data-testid="breadcrumbs" aria-labelledby="sticky-breadcrumb-heading" id="sticky-breadcrumb" class="Breadcrumb-module__nav__rQFDj"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading" id="sticky-breadcrumb-heading">Breadcrumbs</h2><ol class="Breadcrumb-module__list__ZH6zr"><li class="Breadcrumb-module__listItem__Ib0x_"><a class="Breadcrumb-module__repoLink__O2Nbs prc-Link-Link-9ZwDx" data-component="Link" data-testid="breadcrumbs-repo-link" href="/timerring/backend-tutorial/tree/main" data-discover="true">backend-tutorial</a></li><li class="Breadcrumb-module__listItem__Ib0x_"><span class="Breadcrumb-module__separator__eNwsI Breadcrumb-module__md__Wb1Gs" aria-hidden="true">/</span><a class="Breadcrumb-module__directoryLink__kQy_t prc-Link-Link-9ZwDx" data-component="Link" href="/timerring/backend-tutorial/tree/main/java-tutorial" data-discover="true">java-tutorial</a></li></ol></nav><div data-testid="breadcrumbs-filename" class="Breadcrumb-module__filename__equZR"><span class="Breadcrumb-module__separator__eNwsI Breadcrumb-module__md__Wb1Gs" aria-hidden="true">/</span><h1 class="Breadcrumb-module__filenameHeading__MNMtw Breadcrumb-module__md__Wb1Gs prc-Heading-Heading-MtWFE" data-component="Heading" tabindex="-1" id="sticky-file-name-id">ch24_MySQL_basic.md</h1></div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-9n-Xk ml-2 prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-labelledby="_R_7lcpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="CopyToClipboardIconButton-module__tooltip__WyiwL prc-TooltipV2-Tooltip-tLeuB" data-direction="s" data-component="Tooltip" aria-label="Copy path" aria-hidden="true" id="_R_7lcpala9lik5_">Copy path</span></div></div></div><button data-component="Button" type="button" class="prc-Button-ButtonBase-9n-Xk FileNameStickyHeader-module__Button__LSEU_ FileNameStickyHeader-module__GoToTopButton__nxAFn" data-loading="false" data-size="small" data-variant="invisible"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-arrow-up" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.47 7.78a.75.75 0 0 1 0-1.06l4.25-4.25a.75.75 0 0 1 1.06 0l4.25 4.25a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018L9 4.81v7.44a.75.75 0 0 1-1.5 0V4.81L4.53 7.78a.75.75 0 0 1-1.06 0Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3">Top</span></span></button></div></div></div><div class="BlobViewHeader-module__Box_1__VEmuQ"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading">File metadata and controls</h2><div class="BlobViewHeader-module__Box_2__icUs2"><ul aria-label="File view" class="prc-SegmentedControl-SegmentedControl-lqIXp BlobTabButtons-module__SegmentedControl__jen2u" data-variant="default" data-size="small" data-component="SegmentedControl"><li class="prc-SegmentedControl-Item-tSCQh" data-selected="" data-component="SegmentedControl.Button"><button aria-pressed="true" class="prc-SegmentedControl-Button-E48xz" type="button" style="--separator-color:transparent"><span class="prc-SegmentedControl-Content-1COlk segmentedControl-content"><div class="prc-SegmentedControl-Text-7S2y2 segmentedControl-text" data-text="Preview">Preview</div></span></button></li><li class="prc-SegmentedControl-Item-tSCQh" data-component="SegmentedControl.Button"><button aria-pressed="false" class="prc-SegmentedControl-Button-E48xz" type="button" style="--separator-color:var(--borderColor-default)"><span class="prc-SegmentedControl-Content-1COlk segmentedControl-content"><div class="prc-SegmentedControl-Text-7S2y2 segmentedControl-text" data-text="Code">Code</div></span></button></li><li class="prc-SegmentedControl-Item-tSCQh" data-component="SegmentedControl.Button"><button aria-pressed="false" class="prc-SegmentedControl-Button-E48xz" type="button" style="--separator-color:var(--borderColor-default)"><span class="prc-SegmentedControl-Content-1COlk segmentedControl-content"><div class="prc-SegmentedControl-Text-7S2y2 segmentedControl-text" data-text="Blame">Blame</div></span></button></li></ul><div class="d-none"></div><div class="react-code-size-details-in-header CodeSizeDetails-module__Box__VcD6l"><div class="text-mono CodeSizeDetails-module__Box_1__GVxQL"><div data-testid="blob-size" class="CodeSizeDetails-module__Truncate_1__lE93V prc-Truncate-Truncate-2G1eo" data-inline="true" title="119 KB" style="--truncate-max-width:100%"><span>3812 lines (2921 loc) · 119 KB</span></div></div></div></div><div class="BlobViewHeader-module__Box_3__ng6v2"><div class="d-none"></div><div class="react-blob-header-edit-and-raw-actions BlobViewHeader-module__Box_4__J4Y4W"><div class="d-none"></div><div class="prc-ButtonGroup-ButtonGroup-vFUrY" data-component="ButtonGroup"><div class="prc-ButtonGroup-Item-PqvDl"><a data-component="LinkButton" href="https://github.com/timerring/backend-tutorial/raw/refs/heads/main/java-tutorial/ch24_MySQL_basic.md" data-testid="raw-button" class="prc-Button-ButtonBase-9n-Xk LinkButton-module__linkButton__nFnov BlobViewHeader-module__LinkButton__X9kx2" data-loading="false" data-no-visuals="true" data-size="small" data-variant="default"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="text" class="prc-Button-Label-FWkx3">Raw</span></span></a></div><div class="prc-ButtonGroup-Item-PqvDl"><button data-component="IconButton" type="button" data-testid="copy-raw-button" class="prc-Button-ButtonBase-9n-Xk prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="default" aria-labelledby="_R_qaucpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="n" data-component="Tooltip" aria-hidden="true" id="_R_qaucpala9lik5_">Copy raw file</span></div><div class="prc-ButtonGroup-Item-PqvDl"><button data-component="IconButton" type="button" data-testid="download-raw-button" class="prc-Button-ButtonBase-9n-Xk BlobViewHeader-module__downloadButton__ef459 prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="default" aria-labelledby="_R_eaucpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-download" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2.75 14A1.75 1.75 0 0 1 1 12.25v-2.5a.75.75 0 0 1 1.5 0v2.5c0 .138.112.25.25.25h10.5a.25.25 0 0 0 .25-.25v-2.5a.75.75 0 0 1 1.5 0v2.5A1.75 1.75 0 0 1 13.25 14Z"></path><path d="M7.25 7.689V2a.75.75 0 0 1 1.5 0v5.689l1.97-1.969a.749.749 0 1 1 1.06 1.06l-3.25 3.25a.749.749 0 0 1-1.06 0L4.22 6.78a.749.749 0 1 1 1.06-1.06l1.97 1.969Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="n" data-component="Tooltip" aria-hidden="true" id="_R_eaucpala9lik5_">Download raw file</span></div></div></div><button data-component="IconButton" type="button" aria-pressed="false" class="prc-Button-ButtonBase-9n-Xk tmp-mr-2 TableOfContents-module__IconButton__jrlNM prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-labelledby="_R_3ucpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-list-unordered" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M5.75 2.5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5Zm0 5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5Zm0 5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5ZM2 14a1 1 0 1 1 0-2 1 1 0 0 1 0 2Zm1-6a1 1 0 1 1-2 0 1 1 0 0 1 2 0ZM2 4a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="n" data-component="Tooltip" aria-hidden="true" id="_R_3ucpala9lik5_">Outline</span><div class="react-blob-header-edit-and-raw-actions-combined"><button data-component="IconButton" type="button" title="More file actions" data-testid="more-file-actions-button" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-9n-Xk js-blob-dropdown-click BlobViewHeader-module__IconButton__XrMQY prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-labelledby="_R_fkecpala9lik5_" id="_R_kecpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" data-component="Tooltip" aria-hidden="true" id="_R_fkecpala9lik5_">Edit and raw actions</span></div></div></div></div><div></div></div><div class="BlobViewContent-module__blobContentWrapper__JS0W6"><section aria-labelledby="file-name-id-wide file-name-id-mobile" class="BlobContent-module__blobContentSection__VOgZq BlobContent-module__blobContentSectionMarkdown__mPLOK" style="margin-top:46px"><div class="d-flex flex-column flex-items-center tmp-py-3"><span class="prc-Spinner-Box-Y-ke-" data-component="Spinner"><svg height="32px" width="32px" viewBox="0 0 16 16" fill="none" aria-hidden="true" aria-label="Loading" class="prc-Spinner-SpinnerAnimation-tutJZ"><circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke"></circle><path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke"></path></svg></span></div></section></div></div></div> </div> <!-- --> </div></div></div></div></div></div><div class="ScrollMarksContainer-module__scrollMarksContainer__Eu7uU" id="find-result-marks-container"></div><div class="d-none"></div><div class="d-none"></div></div> <!-- --> <!-- --> </div>
</react-app>




  </div>

</turbo-frame>

    </main>
  </div>

  </div>

          <footer class="footer f6 color-fg-muted color-border-subtle tmp-pt-7 tmp-pb-6 p-responsive" role="contentinfo"  >
  <h2 class='sr-only'>Footer</h2>

  


  <div class="d-flex flex-justify-center flex-items-center flex-column-reverse flex-lg-row flex-wrap flex-lg-nowrap">
    <div class="d-flex flex-items-center flex-shrink-0 mx-2">
      <a aria-label="GitHub Homepage" class="footer-octicon mr-2" href="https://github.com">
        <svg aria-hidden="true" data-component="Octicon" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-mark-github">
    <path d="M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943"></path>
</svg>
</a>
      <span>
        &copy; 2026 GitHub,&nbsp;Inc.
      </span>
    </div>

    <nav aria-label="Footer">
      <h3 class="sr-only" id="sr-footer-heading">Footer navigation</h3>

      <ul class="list-style-none d-flex flex-justify-center flex-wrap mb-2 mb-lg-0" aria-labelledby="sr-footer-heading">


          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to Terms&quot;,&quot;label&quot;:&quot;text:terms&quot;}" href="https://docs.github.com/site-policy/github-terms/github-terms-of-service" data-view-component="true" class="Link--secondary Link">Terms</a>
          </li>

          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to privacy&quot;,&quot;label&quot;:&quot;text:privacy&quot;}" href="https://docs.github.com/site-policy/privacy-policies/github-privacy-statement" data-view-component="true" class="Link--secondary Link">Privacy</a>
          </li>


            <li class="mx-2">
              <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to security&quot;,&quot;label&quot;:&quot;text:security&quot;}" href="https://github.com/security" data-view-component="true" class="Link--secondary Link">Security</a>
            </li>

            <li class="mx-2">
              <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to status&quot;,&quot;label&quot;:&quot;text:status&quot;}" href="https://www.githubstatus.com/" data-view-component="true" class="Link--secondary Link">Status</a>
            </li>

          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to community&quot;,&quot;label&quot;:&quot;text:community&quot;}" href="https://github.community/" data-view-component="true" class="Link--secondary Link">Community</a>
          </li>

          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to docs&quot;,&quot;label&quot;:&quot;text:docs&quot;}" href="https://docs.github.com/" data-view-component="true" class="Link--secondary Link">Docs</a>
          </li>

          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to contact&quot;,&quot;label&quot;:&quot;text:contact&quot;}" href="https://support.github.com?tags=dotcom-footer" data-view-component="true" class="Link--secondary Link">Contact</a>
          </li>

          
<li class="mx-2" >
  <cookie-consent-link>
    <button
      type="button"
      class="Link--secondary underline-on-hover border-0 p-0 color-bg-transparent"
      data-action="click:cookie-consent-link#showConsentManagement"
      data-analytics-event="{&quot;location&quot;:&quot;footer&quot;,&quot;action&quot;:&quot;cookies&quot;,&quot;context&quot;:&quot;subfooter&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;cookies_link_subfooter_footer&quot;}"
    >
      Manage cookies
    </button>
  </cookie-consent-link>
</li>

  <li class="mx-2">
    <cookie-consent-link>
      <button
        type="button"
        class="Link--secondary underline-on-hover border-0 p-0 color-bg-transparent text-left"
        data-action="click:cookie-consent-link#showConsentManagement"
        data-analytics-event="{&quot;location&quot;:&quot;footer&quot;,&quot;action&quot;:&quot;dont_share_info&quot;,&quot;context&quot;:&quot;subfooter&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;dont_share_info_link_subfooter_footer&quot;}"
      >
        Do not share my personal information
      </button>
    </cookie-consent-link>
  </li>

      </ul>
    </nav>
  </div>
</footer>



    <ghcc-consent id="ghcc" class="position-fixed bottom-0 left-0" style="z-index: 999999"
      data-locale="en"
      data-initial-cookie-consent-allowed=""
      data-cookie-consent-required="true"
    ></ghcc-consent>




  <div id="ajax-error-message" class="ajax-error-message flash flash-error" hidden>
    <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
    <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>
</svg>
    <button type="button" class="flash-close js-ajax-error-dismiss" aria-label="Dismiss error">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
    <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
</svg>
    </button>
    You can’t perform that action at this time.
  </div>

    <template id="site-details-dialog">
  <details class="details-reset details-overlay details-overlay-dark lh-default color-fg-default hx_rsm" open>
    <summary role="button" aria-label="Close dialog"></summary>
    <details-dialog class="Box Box--overlay d-flex flex-column anim-fade-in fast hx_rsm-dialog hx_rsm-modal">
      <button class="Box-btn-octicon m-0 btn-octicon position-absolute right-0 top-0" type="button" aria-label="Close dialog" data-close-dialog>
        <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
    <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
</svg>
      </button>
      <div class="octocat-spinner tmp-my-6 js-details-dialog-spinner"></div>
    </details-dialog>
  </details>
</template>

    <div class="Popover js-hovercard-content position-absolute" style="display: none; outline: none;">
  <div class="Popover-message Popover-message--bottom-left Popover-message--large Box color-shadow-large" style="width:360px;">
  </div>
</div>

    <template id="snippet-clipboard-copy-button">
  <div class="zeroclipboard-container position-absolute right-0 top-0">
    <clipboard-copy aria-label="Copy code to clipboard" class="ClipboardButton btn js-clipboard-copy m-2 p-0" data-copy-feedback="Copied!" data-tooltip-direction="w">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon m-2 tmp-m-2">
    <path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path>
</svg>
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check js-clipboard-check-icon color-fg-success d-none m-2 tmp-m-2">
    <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path>
</svg>
    </clipboard-copy>
  </div>
</template>
<template id="snippet-clipboard-copy-button-unpositioned">
  <div class="zeroclipboard-container">
    <clipboard-copy aria-label="Copy code to clipboard" class="ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center" data-copy-feedback="Copied!" data-tooltip-direction="w">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon">
    <path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path>
</svg>
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check js-clipboard-check-icon color-fg-success d-none">
    <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path>
</svg>
    </clipboard-copy>
  </div>
</template>




    </div>
    <div id="js-global-screen-reader-notice" class="sr-only mt-n1" aria-live="polite" aria-atomic="true" ></div>
    <div id="js-global-screen-reader-notice-assertive" class="sr-only mt-n1" aria-live="assertive" aria-atomic="true"></div>
  </body>
</html>

